1)。此计时器旨在等待舞台上的阳离子完成,然后转到下一帧。问题是在function finishMove
中,每个条件仅在前一个条件完成完整计时器周期后运行。所以第一个removeChild(gdropBall2);
会立即发生,但{2}会在2秒后被删除,最后removeChild(Wall2Missing);
会在2秒后被删除。我希望这一切都发生在同一时间。我该怎么做?
2)。 removeChild(gdropBall1);
应该停止计时器,但我不确定它是什么,我必须将条件放在function stopTimer
中,因为它在第一个计时器循环中被删除后找不到Child上的错误。
function finishMove
答案 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;
}