2010-02-27 50 views
0

Hai,覆蓋flash.display.Sprite的eventDispatcher

我想在從flash.display.Sprite繼承時重寫dispatchEvent方法。無論何時現在像ADDED_TO_STAGE和CLICK一樣發送事件,它將通過我的理論中的dispatchEvent獲得。然而,他不會通過dispatchEvent獲得任何單一跟蹤。因此,事件會從其他地方在內部調度?

 
    public class TestSprite extends Sprite 
    { 

     public function TestSprite() 
     { 
      this.addEventListener(Event.ADDED_TO_STAGE, this.handleAddedToStage); 
     } 

     private function handleAddedToStage(event:Event):void 
     { 

     } 

     override public function dispatchEvent(event:Event):Boolean 
     { 
      trace(event.type); 

      return super.dispatchEvent(event); 
     } 

    } 
 
      this._sprite = new TestSprite(); 
      this._sprite.graphics.beginFill(0x000000); 
      this._sprite.graphics.drawRect(20, 20, 200, 200); 
      this._sprite.graphics.endFill(); 

         this.addChild(this._sprite); 

沒有任何痕跡..

回答

1

Sprite實現了IEventDispatcher,以便編碼器 - 您可以從顯示列表類派遣自定義事件。然而,正如你所懷疑的那樣,原生的Flash Player事件不是通過dispatchEvent方法本身分派的,它們被創建並在內部傳遞給事件監聽器。我想象一個主要原因是性能。

+0

嗯太糟糕了,你不能捕捉這些事件:),我想我必須找出另一種方式:) – Fristi 2010-02-27 23:01:02

+0

如果你能夠解釋什麼的背景你正在嘗試做 - 也許在另一個問題 - 我敢肯定有人能夠幫助! :) – alecmce 2010-02-28 04:54:11

+0

我想要更多的事件控制。我的計劃是繼承像Sprite,MovieClip,EventDispatcher等常見的類。我想覆蓋IEventDispatcher的方法將事件放在manager/eventdispatcher中?跟蹤所有事件。 每當一個movieclip或精靈被刪除,我可以只調用一個方法(dispose)來刪除所有的事件監聽器並清理內存。 這很容易通過重寫IEventDispatcher方法來實現,但我想通過不重複自己來減少代碼量。這就是爲什麼我想要捕捉這些事件:P – Fristi 2010-02-28 12:04:04

0

遲早的功能,你需要將事件傳遞給真正的精靈或此事件,它不會工作(提示:super.dispatchEvent(事件))

順便說一下,這將只適用於子類自己的類的對象,其他人將繼續子類Sprite,因此使用Sprite方法。

+0

編輯我的問題,使其更清楚:P – Fristi 2010-02-27 13:17:22