ded100let
24.09.2011, 17:49
Приветствую всех, кто заглянул в эту тему!
В стадии написания довольно шустрой игры обнаружил, что реакция на MouseEvent.CLICK слегка замедленна.
Для проверки написал обычный класс, в котором квадрат движется из стороны в сторону с шагом 10 раз в секунду. Если кликнуть в любом месте мышкой, то по идеи квадрат должен остановиться. Проблема в том, что квадрат продолжает двигаться дальше еще 1-3 шага. Есть ли выход из подобной ситуации?
package {
import flash.display.*;
import flash.events.*;
import flash.utils.*;
public class Test extends Sprite {
private var obj:Sprite;
private var timer:Timer;
private var flag:int = 0;
public function Test () :void {
addEventListener(Event.ADDED_TO_STAGE, addedToStageListener);
}
private function addedToStageListener(e:Event) :void {
removeEventListener(Event.ADDED_TO_STAGE, addedToStageListener);
stage.scaleMode = "noScale";
stage.align = "TL";
stage.frameRate = 100;
obj = new Sprite();
obj.graphics.beginFill(0xFF0000);
obj.graphics.drawRoundRect(0, 0, 25, 25, 10);
addChild(obj);
stage.addEventListener(MouseEvent.CLICK, start);
}
private function start (e:MouseEvent) :void {
stage.removeEventListener(MouseEvent.CLICK, start);
stage.addEventListener(MouseEvent.CLICK, stop);
timer = new Timer(100, 0);
timer.addEventListener(TimerEvent.TIMER, move);
timer.start();
}
private function stop (e:MouseEvent) :void {
timer.stop();
timer.removeEventListener(TimerEvent.TIMER, move);
stage.removeEventListener(MouseEvent.CLICK, stop);
stage.addEventListener(MouseEvent.CLICK, start);
}
private function move (e:TimerEvent) :void {
switch(flag) {
case 0:
if (obj.x >= 250) {
obj.x -= obj.width;
flag = 1;
} else {
obj.x += obj.width;
}
break;
case 1:
if (obj.x == 0) {
obj.x += obj.width;
flag = 0;
} else {
obj.x -= obj.width;
}
break;
}
}
}
}
В стадии написания довольно шустрой игры обнаружил, что реакция на MouseEvent.CLICK слегка замедленна.
Для проверки написал обычный класс, в котором квадрат движется из стороны в сторону с шагом 10 раз в секунду. Если кликнуть в любом месте мышкой, то по идеи квадрат должен остановиться. Проблема в том, что квадрат продолжает двигаться дальше еще 1-3 шага. Есть ли выход из подобной ситуации?
package {
import flash.display.*;
import flash.events.*;
import flash.utils.*;
public class Test extends Sprite {
private var obj:Sprite;
private var timer:Timer;
private var flag:int = 0;
public function Test () :void {
addEventListener(Event.ADDED_TO_STAGE, addedToStageListener);
}
private function addedToStageListener(e:Event) :void {
removeEventListener(Event.ADDED_TO_STAGE, addedToStageListener);
stage.scaleMode = "noScale";
stage.align = "TL";
stage.frameRate = 100;
obj = new Sprite();
obj.graphics.beginFill(0xFF0000);
obj.graphics.drawRoundRect(0, 0, 25, 25, 10);
addChild(obj);
stage.addEventListener(MouseEvent.CLICK, start);
}
private function start (e:MouseEvent) :void {
stage.removeEventListener(MouseEvent.CLICK, start);
stage.addEventListener(MouseEvent.CLICK, stop);
timer = new Timer(100, 0);
timer.addEventListener(TimerEvent.TIMER, move);
timer.start();
}
private function stop (e:MouseEvent) :void {
timer.stop();
timer.removeEventListener(TimerEvent.TIMER, move);
stage.removeEventListener(MouseEvent.CLICK, stop);
stage.addEventListener(MouseEvent.CLICK, start);
}
private function move (e:TimerEvent) :void {
switch(flag) {
case 0:
if (obj.x >= 250) {
obj.x -= obj.width;
flag = 1;
} else {
obj.x += obj.width;
}
break;
case 1:
if (obj.x == 0) {
obj.x += obj.width;
flag = 0;
} else {
obj.x -= obj.width;
}
break;
}
}
}
}