Форум 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
		}
		
		}
А так вроде все работает

Старый 20.03.2008, 18:11
CrazyFlasher вне форума Посмотреть профиль Отправить личное сообщение для CrazyFlasher Найти все сообщения от CrazyFlasher
  № 2  
Ответить с цитированием
CrazyFlasher
 
Аватар для CrazyFlasher

Регистрация: May 2003
Адрес: Tallinn
Сообщений: 3,182
использовать onEnterFrame вместо onKeyDown. Если вы нажмёте, к примеру, в notepad'е кнопку и будете её держать, то увидете задержку между между написанием первого символа и последующих...точно так же и здесь
__________________
Flash Developer
Папа TDP4 Team Battle

Старый 20.03.2008, 19:25
Tupak вне форума Посмотреть профиль Отправить личное сообщение для Tupak Найти все сообщения от Tupak
  № 3  
Ответить с цитированием
Tupak

Регистрация: Mar 2008
Сообщений: 25
Спасибо. Из тормозов остался только я))) все работает на ура!

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

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

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


 


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


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