我正在製作一個動畫片段,該動畫片段包含一些我希望以特定間隔執行的函數。TimerEvent AS3函數的循環數組
下面是代碼:
var Tmr:Timer = new Timer(1000, 3);
var funcArray:Array = [move1, move2, move3];
var i:Number = 0;
funcArray[i]();
function kick(){
if (i < 2) {i++; funcArray[i](); trace("GO NEXT");}
else {i = 0; funcArray[i](); trace("FROM-START");}
}
function timerX():void{
Tmr.start();
Tmr.addEventListener(TimerEvent.TIMER_COMPLETE, outro);
trace("TIMERSTART");
}
function outro(e:TimerEvent):void{
e.currentTarget.removeEventListener(TimerEvent.TIMER_COMPLETE, outro);
trace("TIMEREND");
kick();
}
function move1(){
item1.x = 100;
item1.y = 100;
trace("MOVE1");
timerX()
}
function move2(){
item1.x = 300;
item1.y = 400
trace("MOVE2");
timerX();
}
function move3(){
item1.x = 800;
item1.y = 600
trace("MOVE3");
timerX();
}
正如你看到的,因爲...... move1後的黑暗魔法發生(我和trace命令填充它)已經玩過:顯然它啓動每次循環的功能SECOND而不是5,就像它取決於一個Enter_Frame事件。
在輸出信號線序列是:MOVE1,TIMERSTART,TIMEREND,MOVE2,TIMERSTART,去旁邊,TIMEREND,MOVE3,TIMERSTART,去旁邊,TIMEREND,MOVE1,TIMERSTART從開始...
代替的:MOVE1,TIMERSTART,TIMEREND,GO NEXT,MOVE2,TIMERSTART,TIMEREND,去旁邊等
我也試圖移動踢()在結尾功能了一個
function outro(e:TimerEvent):void{
kick();
e.currentTarget.removeEventListener(TimerEvent.TIMER_COMPLETE, outro);
trace("TIMEREND");
}
而且效果是它沒有去過move2()。
你認爲哪裏是錯誤?我用來寫下這個邏輯的錯誤是什麼?
感謝您的親切幫助!
賈森感謝您的回覆。其實我真的錯過了'stop()'和'reset()';我寫的代碼實際上可以讓我指定不同的計時器長度,所以我可以有一定的靈活性(比如我希望在move2()和move3()之間有10秒的時間)。 我添加了它,一切按預期工作,但感謝指向另一個方向。 我想'exit()'是用來結束循環和「走出去」的東西,對嗎? 感謝您的幫助! – SimeoneSergio