鼠标事件在文档类中不起作用



是的,我在这里看到了一些关于类似问题的主题,但我的问题不同。我在FlashDevelopment中设置了一个AIR项目并编写了以下内容:

package {
    import flash.display.Sprite;
    import flash.events.MouseEvent;
    public class Main extends Sprite {     
        public function Main():void {
            graphics.beginFill(0)
            graphics.drawRect(0, 0, 100, 100)
            graphics.endFill()
            addEventListener(MouseEvent.CLICK, onEvt)
        }
        private function onEvt(e:MouseEvent):void {
            trace("yahoo")
        }
    }
}

我编译了这个项目,点击了黑色方块,什么也没发生。什么都没有。然后我将所有这些代码移动到另一个类 RealMain 并将其添加为子类:

public function Main():void {
    addChild(new RealMain())
}

它奏效了。那么,如果类是文档类,为什么我的事件侦听器不起作用?是的,我可以使用stage.addEventListener(),但为什么呢?

尝试不使用 Sprite 的图形属性,而是制作一个 Shape,在其上绘制并将其添加到您的 Sprite 中。我希望一个没有子角色的精灵表现为形状,而形状本身无法听事件。

public class Main extends Sprite {     
    public function Main():void {
        var sh:Shape=new Shape();
        sh.graphics.beginFill(0);
        sh.graphics.drawRect(0, 0, 100, 100);
        sh.graphics.endFill();
        addChild(sh);
        addEventListener(MouseEvent.CLICK, onEvt);
    }
    private function onEvt(e:MouseEvent):void {
        trace("yahoo");
    }
}

应该以这种方式工作。

addEventListener 是 EventDispatcher 类的函数,需要调用 EventDispatcher 的实例。

Main 的行为略有不同,因为它是以静态方式调用的。为了拥有一个 Main 实例,我们必须做一些如下工作(不是很优雅)

package {
    import flash.display.Stage;
    import flash.display.MovieClip;
    public class Main extends MovieClip {
        private static var _instance:Main = null;
        public function Main() {
            _instance = this;
        }
        public static function getInstance():Main { return _instance; }
        public static function getStage():Stage { return getInstance().stage; }
    }
}

Addchild有助于创建一个普通的类。

文档类必须扩展MovieClip而不是Sprite

最新更新