2009-12-18 88 views
0

我有一個我在FlexBuilder中構建的AS3項目。階段Event.ENTER_FRAME與CREATION_COMPLETE

在我的主類的構造函數,我有這樣的:

stage.addEventListener(Event.ENTER_FRAME, stage_enterFrameHandler); 

,並且隨後事件處理函數:

private var tempCounter:uint = 0; 

    private function stage_enterFrameHandler(event:Event):void 
    { 
     stage.removeEventListener(Event.ENTER_FRAME, stage_enterFrameHandler); 
     tempCounter += 1; 
     trace(tempCounter); 
    } 

當我在調試模式下運行,tempCounter寫出一次,如1.這是爲什麼?我雖然Event.ENTER_FRAME的全部意義在於它繼續發射。

documentation說:

如果播放頭不移動,或者如果只有一個框,此事件始終與以幀速率調度。此事件將同時分派給所有偵聽此事件的顯示對象。

那麼,爲什麼我不會看到計數器每秒增加約30倍(這是我的幀速率設置)?

編輯注:

OK,很好,衛生署,我已經想通了。這是因爲我立即刪除了eventlistener。 ENTER_FRAME事件不會繼續觸發......代碼以這種方式完成的唯一原因(我繼承的代碼)是,我想,如果不使用flex框架,CREATION_COMPLETE不可用。

回答

1

答案很簡單,只要在您輸入幀中輸入您要刪除偵聽器,以便下次輸入幀事件發生時沒有人對其作出反應。

刪除行

stage.removeEventListener(Event.ENTER_FRAME, stage_enterFrameHandler); 
+0

是的,哎呀,謝謝。但希望對於那些想知道如何在沒有Flex框架的情況下模擬creationComplete的人有所幫助。 – David