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