2011-05-03 37 views
0

我正在做處理類,將閱讀與此類似:什麼是可以在AS3中使用addEventListener的最基本的對象?

package avian.background 
{ 
    import flash.events.EventDispatcher; 
    import flash.events.Event; 
    import flash.utils.getTimer; 
    import avian.objects.AvChild; 
    import avian.background.AvManager; 

    public class AvHandler extends EventDispatcher 
    { 
     // vars 
     private var _last:uint = 0; 
     private var _time:uint = 0; 

     /** 
     * Constructor 
     */ 
     public function AvHandler() 
     { 
      addEventListener(Event.ENTER_FRAME, _handle); 
      _last = getTimer(); 
     } 

     /** 
     * Called on dispatch of Event.ENTER_FRAME 
     */ 
     private function _handle(e:Event):void 
     { 
      _time = getTimer() - _last; 

      var i:AvChild; 
      for each(i in AvManager.getList("all")) 
      { 
       i.step(_time); 
      } 

      _last = getTimer(); 
     } 
    } 
} 

的目標是有這個類擴展了最基本的可能仍然可以使addEventListener()使用 - 由於某種原因, ENTER_FRAME甚至不會觸發 - 如果要延長,可以正常工作SpriteMovieClip。我錯誤地認爲EventDispatcher是最基本的可能。

我最初的事件適用於我通過構造函數解析的階段 - 這看起來很不整潔。

回答

0

觸發該Event.ENTER_FRAME最簡單的類是的DisplayObject

+0

謝謝隊友 - 看看它。 – Marty 2011-05-03 07:36:30

+0

您是否確認實際上可以從DisplayObject擴展並實例化您的AvHandler類而不會出現運行時錯誤?我不認爲DisplayObject可以直接實例化,但我並不知道是否可以安全地實例化,只要將其向下一級進行實例化(不需要任何設置)即可。 – bigp 2011-05-04 16:33:17

+0

它可能在DisplayObject的本機代碼中有一定程度的'abstract-detection',它可以在AS3中複製爲:if(Object(this).constructor == YourAbstractClass){//錯誤! } – bigp 2011-05-04 16:35:41

相關問題