AS3使用事件调度程序

时间:2013-10-09 20:49:54

标签: actionscript-3 flash dispatchevent

我做了一个门/按钮并添加为一个类,我想要它,所以当你点击它时,它会发送一个事件,指示主要动作脚本页面中的一个功能运行

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")
} 
我在做错了什么?看起来很直接

1 个答案:

答案 0 :(得分: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。与每个变量相同。

相关问题