Actionscript 3 覆盖flash.display.Sprite';事件调度器

Actionscript 3 覆盖flash.display.Sprite';事件调度器,actionscript-3,events,actionscript,Actionscript 3,Events,Actionscript,海, 我想在继承flash.display.Sprite时重写dispatchEvent方法。在我的理论中,每当一个事件现在被调度时,比如将_添加到_STAGE并单击它就会通过dispatchEvent。然而,他无法通过dispatchEvent获得任何线索。。那么事件是从其他地方内部调度的 public class TestSprite extends Sprite { public function TestSprite() {

海,

我想在继承flash.display.Sprite时重写dispatchEvent方法。在我的理论中,每当一个事件现在被调度时,比如将_添加到_STAGE并单击它就会通过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); } } 公共类TestSprite扩展了Sprite { 公共函数TestSprite() { this.addEventListener(Event.ADDED_至_阶段,this.HandLeadedToStage); } 私有函数HandLeadedToStage(事件:事件):无效 { } 重写公共函数dispatchEvent(事件:event):布尔值 { 跟踪(事件类型); 返回super.dispatchEvent(事件); } } 这个._sprite=newtestsprite(); 这个.u sprite.graphics.beginll(0x000000); 这个.u sprite.graphics.drawRect(20,20,200,200); 这个._sprite.graphics.endFill(); this.addChild(this.\u sprite);
没有痕迹

在函数中,您迟早需要将事件传递给真正的sprite eventDispatcher,否则它将无法工作(提示:super.dispatchEvent(事件))


顺便说一句,这将只适用于子类化您自己类的对象,其他对象将继续子类化Sprite,因此使用Sprite方法。

Sprite实现IEventDispatcher,以便编码器(您)可以从显示列表类中调度自定义事件。然而,正如您所怀疑的,本机Flash Player事件不是通过dispatchEvent方法本身进行调度的,而是在内部创建并传递给事件侦听器。我想这其中的一个主要原因是性能。

Hmm太糟糕了,你不能捕捉到这些事件:),我想我必须想出另一种方法:)如果你能解释你想做的事情的背景-也许在另一个问题中-我肯定有人能帮到你:)我想对事件有更多的控制权。我的计划是对普通类(如Sprite、MovieClip、EventDispatcher等)进行子类化。我想覆盖IEventDispatcher的方法,将事件放入manager/EventDispatcher?记录所有事件。每当删除movieclip或sprite时,我可以调用一个方法(dispose)来删除所有事件侦听器并清理内存。当然,这可以通过重写IEventDispatcher方法轻松实现,但我希望通过不重复自己来减少代码量。这就是我想要捕捉这些事件的原因:PAh,您正在尝试实现removeAllListeners()样式的方法?隐马尔可夫模型。。。很不幸,你会发现这是不可能的,对不起。另一种方法可能是考虑从本地事件迁移到信号,但是?(搜索AS3信号)-包括removeAll方法。如果您在整个应用程序中采用此方法,您可以更好地控制事件,并可能实现您所描述的内容。祝你好运那个信号库看起来不错!哲学符合我的标准:) 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 );