2013-02-04 49 views
0

我正在AS3,適用於iOS SDK的Flash AIR 3.2中工作。我試圖在myLoader完成加載圖像後才運行部分程序。我有一個myTimer.start();它運行在myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaderComplete);內。TimerEvent函數忽略計時器延遲

目前看來什麼問題是程序忽略了1000ms。該程序myLoader目前完成後運行,但它似乎在延遲方面做了自己的事情。

編輯:在這裏更精確...該計劃似乎忽略了計時器延遲。即使Timer設置爲100000ms。圖像加載後,它似乎正在運行程序的其餘部分。

編輯:我仍然有我的方法運行在我的主要()以及代碼中的timerListener()。以爲我評論他們。哎呦!

var myTimer:Timer = new Timer(1000); 

public function Main() 
    { 
     init(); 
     displayImage(); 

     myTimer.addEventListener(TimerEvent.TIMER, timerListener); 
     myTimer.addEventListener(TimerEvent.TIMER_COMPLETE, timerDone); 

    } 

public function displayImage():void { 

     myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaderComplete); 

     myLoader.load(fileRequest); 
    } 

public function onLoaderComplete(e:Event) { 
     //start Timer event here 
     myTimer.start(); 
    } 

public function timerListener (e:TimerEvent):void{ 
     trace("Timer is Triggered"); 
     myTimer.stop(); 

     aMethod(); 
     anotherMethod(); 
     moreMethods(); 
    } 
+0

由於您在TIMER事件處理程序中停止計時器,因此除了可能不需要TIMER_COMPLETE事件處理程序外,沒有任何內容會跳出來作爲錯誤。要驗證它是否真的在等待1秒,請嘗試使用[getTimer()](http://help.adobe.com/zh_CN/FlashPlatform/reference/actionscript/3/flash/utils/package.html#getTimer() )方法 - trace()getTimer()在onLoaderComplete()和timerListener()方法中返回的值。 –

+0

是的,TIMER_COMPLETE實際上並沒有運行。我忘了刪除它。我已經在onLoaderComplete()和timerListener()中追蹤了它。該計時器似乎在正確的延遲間隔運行,但我在我的文章中描述的問題仍然存在。 – ArrayOutOfBounds

回答

2

你並沒有真正說明你的意思是「計時器正在做它自己的事情」。計時器是否比預期的更短或更長?

我認爲在這裏可能會發生的是您的計時器滴答和幀速率不同步。如果您熟悉elastic racetrack的概念,您知道Flash的單線程特性(除非您使用工作線程)意味着屏幕無法在腳本中更新,反之亦然。這意味着如果您的Timer在顯示列表更新時觸發,則只需等待顯示列表完成,甚至可能必須等到其他腳本運行完畢,這取決於Flash如何優先處理隊列中的不同內容。

Timer API

根據SWF文件的幀速率或運行時環境 (可用內存和其他因素),運行時可分派事件 在稍有偏差的間隔。例如,如果一個SWF文件設置爲 ,以每秒10幀(fps)播放,即100毫秒間隔 ,但您的計時器設置爲在80毫秒內觸發一個事件,則該事件將分派到接近100毫秒的間隔。內存密集型腳本也可能會抵消事件。

+0

對不起,我不是很清楚。我看了一下彈性跑道的鏈接,我明白你的意思。但是,這實際上並不是問題所在 - 例如,即使將Timer()設置爲100000這樣的很大的ms間隔,它也不起作用。該程序似乎忽略了定時器延遲並在圖像加載後立即運行。 – ArrayOutOfBounds

+0

我其實有重複的代碼。 (D'oh!)在timerListener()被觸發後,仍然有一點「滯後」,我假設這是顯示列表更新和加載,如上所述。 – ArrayOutOfBounds