Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 20.03.2008, 18:03
Tupak вне форума Посмотреть профиль Отправить личное сообщение для Tupak Найти все сообщения от Tupak
  № 1  
Ответить с цитированием
Tupak

Регистрация: Mar 2008
Сообщений: 25
По умолчанию Как справиться с тормозами при обработке событий.

Уважаемые Флешеры!
Не могу понять в чем причина тормозов( в приведенном ниже коде объект танк долго думает прежде чем начать движение). Я думаю что варианта 2. Либо обработчик неправильно использую, либо функция рассчета расстояния до объекта слишком замороченная. Подскажите пожалуйста в чем причина.
Код:
var flag// переменная направленя движения

var ArWater:Array=new Array()  // массив хранящий координаты объектов
var ArWater1:Array=new Array() // массив хранящий координаты целевого объекта
var ArWater2:Array=new Array() // массив хранящий координаты целевого объекта
var ArWater3:Array=new Array() // массив хранящий координаты целевого объекта
var ArWater4:Array=new Array() // массив хранящий координаты целевого объекта

attachMovie("tank","t",100,{_x:91,_y:570})//танк 
for(i=1;i<11;i++){                          //добавление объектов в массив
	if(this["w"+i]._x!=undefinite){
		ArWater.push([this["w"+i]._x,this["w"+i]._y])

		}}

var obj:Object= new Object()
Key.addListener(obj)
obj.onKeyDown=function (){
	
	switch (Key.getCode()){
		case Key.UP:
		t._rotation=0
		if(flag!="UP"){
			ArWater1.splice(0)
			for(i=0;i<ArWater.length;i++){
	if((ArWater[i][0]+30>t._x-30)&&(ArWater[i][0]-30<t._x+30)){
		if(ArWater[i][1]<t._y){
		ArWater1.unshift(ArWater[i][1])
		ArWater1.sort(Array.NUMERIC)
	k1=ArWater1.length-1
		}}}}
		if(ArWater1[0]==undefinite){dist=1000}
		else{
		dist=(t._y-30)-(ArWater1[k1]+30)
		}
		if(dist>0){ t._y-=2
		trace(dist)
		}
		flag="UP"
		break
		}
		switch (Key.getCode()){
		case Key.DOWN:
			t._rotation=180
			if(flag!="DOWN"){
				ArWater2.splice(0)
			for(i=0;i<ArWater.length;i++){
	if((ArWater[i][0]+30>t._x-30)&&(ArWater[i][0]-30<t._x+30)){
		if(ArWater[i][1]>t._y){
		ArWater2.unshift(ArWater[i][1])
		ArWater2.sort(Array.NUMERIC)
		
		}}}}
		if(ArWater2[0]==undefinite){dist=1000}
		else{
		dist=(ArWater2[0]-30)-(t._y+30)
		}
		if(dist>0){ t._y+=2
		trace(dist)
		}
			
			
			flag="DOWN"
			break
		}
		switch (Key.getCode()){
		case Key.LEFT:
			t._rotation=270
			if(flag!="LEFT"){
				ArWater3.splice(0)
				for(i=0;i<ArWater.length;i++){
	if((ArWater[i][1]+30>t._y-30)&&(ArWater[i][1]-30<t._y+30)){
		if(ArWater[i][0]<t._x){
			ArWater3.unshift(ArWater[i][0])
		ArWater3.sort(Array.NUMERIC)
		k3=ArWater3.length-1
		}}}}
		if(ArWater3[0]==undefinite){dist=1000}
		else{
		dist=(t._x-30)-(ArWater3[k3]+30)
		}
		if(dist>0){ t._x-=2
		trace(dist)
		}
			
			flag="LEFT"
		
		break
		}
		switch (Key.getCode()){
		case Key.RIGHT:
			t._rotation=90
			if(flag!="RIGHT"){
				ArWater4.splice(0)
				for(i=0;i<ArWater.length;i++){
	if((ArWater[i][1]+30>t._y-30)&&(ArWater[i][1]-30<t._y+30)){
		if(ArWater[i][0]>t._x){
			ArWater4.unshift(ArWater[i][0])
			ArWater4.sort(Array.NUMERIC)
			
		}}}}
		if(ArWater4[0]==undefinite){dist=1000}
		else{
		dist=(ArWater4[0]-30)-(t._x+30)
		}
		if(dist>0){ t._x+=2
		trace(dist)
		}
			
			flag="RIGHT"
			break
		}
		
		}
А так вроде все работает

Создать новую тему   Часовой пояс GMT +4, время: 03:41.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 03:41.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.