这段代码会延迟每次循环被触发之间的时间吗?
while (coin.x > objYEnemy.x) {
var delay:Timer = new Timer(100, 1);
delay.addEventListener(TimerEvent.TIMER, runOnce);
delay.start();
function runOnce(event:TimerEvent):void {
coin.x -= 1;
delay.stop();
}
}
答案 0 :(得分:4)
不是真的。你的循环将一直反复运行(在你的计时器等待触发时至少持续100ms),每次创建一个新的计时器并造成内存泄漏,因为你的计时器永远不会因为他们的事件监听器而被处理掉。由于您的runOnce是一个匿名函数,因此对于每个创建的计时器,它也会运行很多次。
如果不知道你想要完成什么,看起来你想做的就是让计时器滴答处理程序成为循环函数。
var checkTimer:Timer = new Timer(100);
checkTimer.addEventListener(TimerEvent.TIMER, doCheck);
checkTimer.start();
function doCheck(e:Event):void {
if(coin.x > objYEnemy.x){
coin.x -= 1;
//If you want this to only happen once, then add the following line:
checkTimer.stop();
}
}
答案 1 :(得分:0)
没有。第一个问题是,第一次运行循环时runOnce
未定义,因此它甚至不会运行一次。第二个问题是执行此代码的顺序:循环将启动大量的定时器,直到满足中断条件,一旦某些定时器触发runOnce
的执行,就会发生这种情况。使用LondonDrugs_MediaServ的代码,并在不再需要计时器后取消注册事件监听器,以便收集垃圾。