Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Как справиться с тормозами при обработке событий. (http://www.flasher.ru/forum/showthread.php?t=109780)

Tupak 20.03.2008 18:03

Как справиться с тормозами при обработке событий.
 
Уважаемые Флешеры!
Не могу понять в чем причина тормозов( в приведенном ниже коде объект танк долго думает прежде чем начать движение). Я думаю что варианта 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
                }
               
                }

А так вроде все работает:rolleyes:

CrazyFlasher 20.03.2008 18:11

использовать onEnterFrame вместо onKeyDown. Если вы нажмёте, к примеру, в notepad'е кнопку и будете её держать, то увидете задержку между между написанием первого символа и последующих...точно так же и здесь

Tupak 20.03.2008 19:25

Спасибо. Из тормозов остался только я))) все работает на ура!


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

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