1

我制作了一个门/按钮并添加为一个类,我想要它,所以当您单击它时,它会调度一个事件,该事件指示主动作脚本页面中的函数运行

package  {
    import flash.display.MovieClip;
    import flash.events.MouseEvent;

    public class Door extends MovieClip {

        var direct:String;
        var doorId:int;
        var dispatcher = new EventDispatcher();

        public function Door()  {
            this.addEventListener(MouseEvent.CLICK, changeRoom)
            this.buttonMode = true;
        }

        function changeRoom(e:MouseEvent):void{
            trace("door click")
            dispatcher.dispatchEvent( new Event("doorClick") );
        }
    }
}

主页看起来像这样

var doorTop = new Door();
doorTop.addEventListener("doorClick",goToRoom);
//should i be doing stage.addEventListener("doorClick",goToRoom);
function goToRoom(e:Event):void
{
  trace("i went here")
} 

我究竟做错了什么?似乎很直接

4

1 回答 1

4

您不是从 调度事件doorTop,而是从dispatcher内部调度它doorTop

Door延伸MovieClip哪个延伸EventDispatcher。您不需要创建 EventDispatcher,您的Door类已经是一个。

只需这样做:

    function changeRoom(e:MouseEvent):void{
        trace("door click")
        this.dispatchEvent( new Event("doorClick") );
    }

这将从Door对象中分派它。

此外,如果您使用类,则在类的顶级范围内声明的每个对象(包括函数)都必须包含访问修饰符(public、private、internal 或 protected)。你不能只是声明function changeRoom,它必须是public function changeRoom。与您的每个变量相同。

于 2013-10-09T21:02:22.693 回答