这段代码会延迟每次触发循环之间的时间吗?
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();
}
}
发布于 2012-09-07 16:21:07
不怎么有意思。你的循环将一遍又一遍地运行(当你的计时器等待触发时,至少运行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();
}
}
发布于 2012-09-07 16:26:16
不是的。第一个问题是,当循环第一次运行时,runOnce
是未定义的,因此它甚至不会运行一次。第二个问题是这段代码的执行顺序:循环将启动大量计时器,直到满足中断条件,这将在一些计时器触发runOnce
执行时立即发生。使用LondonDrugs_MediaServ的代码,在不再需要计时器之后注销事件侦听器,这样它就可以被垃圾回收了。
https://stackoverflow.com/questions/12321802
复制相似问题