Flash 在as3中如何调度事件?

Flash 在as3中如何调度事件?,flash,actionscript-3,Flash,Actionscript 3,我很难理解如何调度事件以及在哪里捕获它们。目前我有一个文档类waterMain和另一个类gunner。我的waterMain创建了gunner的一个对象,并将其作为子对象添加,在gunner中有一个函数firebullet,在其中我发送一个 dispatchEvent(新事件(“bulletFired”) 在我的waterMain课上我做了一个 addEventListener("bulletFired", bulletFiredHandler); private functi

我很难理解如何调度事件以及在哪里捕获它们。目前我有一个文档类waterMain和另一个类gunner。我的waterMain创建了gunner的一个对象,并将其作为子对象添加,在gunner中有一个函数firebullet,在其中我发送一个

dispatchEvent(新事件(“bulletFired”)

在我的waterMain课上我做了一个

    addEventListener("bulletFired", bulletFiredHandler); 
    private function bulletFiredHandler(e:Event):void       
{           
hudMenu.reduceBullet();         
}
hudMenu是waterMain文档类上的一个变量,但是似乎什么都没有发生。waterMain类是否未捕获已调度事件

package  
{
    import flash.display.MovieClip;
    import flash.display.Stage;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.geom.Point;
    /**
     * ...
     * @author ...
     */
    public class Gunner extends MovieClip
    {
        private var _stageRef:Stage;
        public var barrel:MovieClip;
        public var point:MovieClip;
        public var _hudMenu:HUD;

        public function Gunner(stageRef:Stage) 
        {   

            //trace("current rotation" + barrel.rotation);
            //barrel.rotation = -90;
            _stageRef = stageRef;
            addEventListener(Event.ENTER_FRAME, rotateTurret);
            _stageRef.addEventListener(MouseEvent.MOUSE_DOWN, fireBullet);


        private function rotateTurret(evt:Event):void 
        {
            //calculations, distance, angle etc
            var a:Number = _stageRef.mouseX - x;
            var b:Number = _stageRef.mouseY - y;
            var angRad:Number = Math.atan2(b, a);
            var angDeg:Number = (angRad * 180 / Math.PI);
            //trace(angDeg );

            barrel.rotation = (angDeg);
        }
        private function fireBullet(mouseEvt:MouseEvent):void
        {

            dispatchEvent(new Event("bulletFired"));
            _stageRef.addChildAt(new Bullet(_stageRef,x, y , new Point(mouseEvt.stageX, mouseEvt.stageY), _koiArray, _lionArray), 1);
            _stageRef.addChild(_stageRef.addChild(this));
        }
    }

}

您需要将事件添加到gunner类中,如下所示:

gunner.addEventListener("bulletFired", bulletFiredHandler);

如果我没有看错你的问题,gunner类已经是EventDispatcher子类了。

为了补充@Neoraptor之前的回答,你也可以通过发送带有“bubbles=True”的事件来处理这个问题

冒泡事件意味着获取该事件并将其从dispatcher传递到整个显示层次结构,一直传递到document类。只要事件未设置为cancelable(或者设置为cancelable,并且实际上没有任何东西会取消它),那么您的事件最终将到达document类


@Neoraptor提供的另一种解决方案是正确的,但应该指出,这不是唯一的方法。有时,您希望使用bubbles=True方式,尤其是当您的事件被分派到显示列表的更深处时。例如,如果您的项目符号是动态创建的,并且它们分派document类需要知道的事件,那么让事件从分派器中冒泡要比尝试将创建的项目符号的特定实例作为目标容易得多。

谢谢您解决了这一问题。将eventListener添加到我的waterMain文档类填充字符上的gunner变量中,现在::)@Kyroge如果这回答了您的问题,请将其标记为正确答案。是的,我不能更早,因为我还没有超过时间限制。movieclips中是否有气泡属性?默认值是多少?