定时器的周期和结束周期

时间:2015-05-18 20:14:34

标签: actionscript-3

1)。此计时器旨在等待舞台上的阳离子完成,然后转到下一帧。问题是在function finishMove中,每个条件仅在前一个条件完成完整计时器周期后运行。所以第一个removeChild(gdropBall2);会立即发生,但{2}会在2秒后被删除,最后removeChild(Wall2Missing);会在2秒后被删除。我希望这一切都发生在同一时间。我该怎么做?

2)。 removeChild(gdropBall1);应该停止计时器,但我不确定它是什么,我必须将条件放在function stopTimer中,因为它在第一个计时器循环中被删除后找不到Child上的错误。

function finishMove

2 个答案:

答案 0 :(得分:0)

永远不会调用你的stopTimer函数...为处理程序添加EventListener stopTimer我无处可见...... 对于停止功能试试这个:

function stopTimer(event: TimerEvent): void {
    timer2.removeEventListener(TimerEvent.TIMER, finishMove);
    timer2.stop();
}  

但一定要打电话给它; - )

答案 1 :(得分:0)

由于您使用if/else,条件检查在遇到true语句后会停止。因此,如果第一个if语句是第一个,那么它只会检查第二个if语句。您可以删除else语句,使其在同一循环中检查所有三个语句(见下文)。

您的stopTimer功能令我感到困惑。您是否曾将该函数添加为计时器事件的处理程序?

如果要先停止计时器,请先调用stop(),然后删除所有事件侦听器,然后将变量设置为null。在我的例子中,我只是直接调用一个函数:

function finishMove(e: TimerEvent): void {
    if (stage.contains(gdropBall2)) {
       removeChild(gdropBall2);
    } 

    if (stage.contains(Wall2Missing)) {
       removeChild(Wall2Missing);
    } 

    if (stage.contains(gdropBall1)) {
       removeChild(gdropBall1);
       gotoAndStop(2);
    }

    stopTimer();
}

function stopTimer():void {
    timer2.stop();
    timer2.removeEventListener(TimerEvent.TIMER, finishMove);
    timer2 = null;
}