2012-04-03 136 views
0

我有一些計時器在頁面上運行,我無法確定在頁面運行時離開該頁面時如何停止。如何在離開「屏幕」時停止計時器

該調用來自另一個影片剪輯上的一個按鈕,該剪輯正在調用Main.as上的一個函數。在Main.as的

功能做到這一點:

public function goToIntro(){ 

      removeChild(currentScreen); 
      intro = new Intro(); 
      addChildAt(intro,0); 
      currentScreen = intro; 



     } 

如果我點擊的前奏按鈕,同時用計時器任何場景是打我收到此錯誤信息。消息

不會馬上出現,它就像介紹「場景」結束並調用下一個場景一樣。

TypeError: Error #1009: Cannot access a property or method of a null object reference. 
    at MethodInfo-202() 
    at flash.utils::Timer/_timerDispatch() 
    at flash.utils::Timer/tick() 

我在介紹頁面上有這樣的代碼,應該在清除它時進行清理。

public function Intro() { 

      addEventListener(Event.REMOVED_FROM_STAGE, removedHandler); 


private function removedHandler(event:Event):void { 



} 

我想不出如何從removedHander函數中殺死定時器。我試圖刪除事件監聽器,但會導致其他錯誤消息。如果偵聽器不是null,那麼我試着做一個測試,然後停止它。這顯然永遠不會運行(我用trace語句來測試它)。我試着測試一下,如果計時器運行,然後停止,但也沒有工作。

幫助!

此外,我是一個完整的動作和編程新手,因此可以像我5歲時一樣跟我說話。謝謝

+0

計時器開始在哪裏? – Ronnie 2012-04-03 19:08:50

+0

在currentScreen類中添加「eventFromStage」的事件偵聽器並停止處理程序中的計時器。 – 2012-04-03 21:50:22

回答

0

您可以使用Timer.stop()呼叫停止Timer。您可以撥打這個電話你removedHandler,像這樣:

private function removedHandler(event:Event):void { 
    if (myTimer != null) myTimer.stop(); 
} 

這意味着,你必須保持,以阻止它周圍的計時器的參考。在這種情況下,參考文獻是myTimer

+0

我完全是這樣做的,根據我的跟蹤者,這個新代碼從未運行過。我仍然收到相同的錯誤信息。 – mrfreddy 2012-04-03 19:27:02

+0

所以你說'removedHandler'永遠不會被調用?正在被刪除的MovieClip是「Intro」嗎?你的問題聽起來像是當你進入介紹時發生的問題,而不是你退出時的問題。您可以不用監聽'REMOVED_FROM_STAGE',而是直接在'goToIntro'函數中停止定時器。 – 2012-04-03 19:29:52

+0

removedHandler正在運行,但如果myTimer!= null位顯然永遠不會運行。我看着goToIntro的想法,謝謝! – mrfreddy 2012-04-03 20:17:48