2015-05-18 85 views
0

1)。這個計時器被設計爲等待舞臺上的陽光完成,然後轉到下一幀。問題是,在function finishMove每個條件只有在前一個條件完成了完整的定時器週期之後纔會運行。所以第一個removeChild(gdropBall2);立即發生,但是removeChild(Wall2Missing);在2秒後被刪除,而最後的removeChild(gdropBall1);在2秒後被刪除。我希望這一切都發生在同一時間。我怎麼做? 2)。 function stopTimer應該停止計時器,但我不確定它是否確實如此,我不得不將條件放在function finishMove中,因爲它在第一個計時器週期中被刪除後沒有找到孩子。定時器的週期和結束週期

var timer2: Timer = new Timer(2000); 
timer2.addEventListener(TimerEvent.TIMER, finishMove); 

function checkScoreScene10(): void { 
    if (scoreScene10 >= 300) { 
    timer2.start(); 
    } 
} 

function finishMove(e: TimerEvent): void { 
    if (stage.contains(gdropBall2)) { 
    removeChild(gdropBall2); 
    } else if (stage.contains(Wall2Missing)) { 
    removeChild(Wall2Missing); 
    } else if (stage.contains(gdropBall1)) { 
    removeChild(gdropBall1); 
    gotoAndStop(2); 
    } 

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

回答

0

由於您使用if/else條件檢查遇到true語句後停止。因此,如果第一條語句錯誤,那麼它只會檢查第二條語句。您可以刪除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; 
} 
+0

謝謝,它的工作原理。 – SBA

0

你stopTimer功能永遠不會被調用...添加事件監聽的處理程序stopTimer我不能看到的停止功能的任何地方...... 試試這個:

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

但一定要叫它;-)

相關問題