如何延迟while循环?

时间:2012-09-07 16:12:49

标签: actionscript-3 loops timer while-loop

这段代码会延迟每次循环被触发之间的时间吗?

  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();
    }
}

2 个答案:

答案 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的代码,并在不再需要计时器后取消注册事件监听器,以便收集垃圾。

相关问题