自定义事件无法到达来电者

时间:2011-09-22 22:48:56

标签: flash actionscript-3 events flash-cs5

我创建了一个自定义事件,当一个类中的特定函数被执行时,该事件应该被触发。我从我的主脚本中听取了这个事件,构成了我的时间轴之一。请参阅代码以更好地理解我的问题。

我的CustomEvents.as

package  {
    import flash.events.Event;  
        public class CustomEvents extends Event {

            public static const PAGE_EMPTY:String = "Page Empty";

            public function CustomEvents(type:String) {
                super(type);
                trace("hello from within the event class!");
            }
        }   
}

FRONT_PAGE.as中调度事件的函数

public function exitPage(){

        dispatchEvent(new CustomEvents(CustomEvents.PAGE_EMPTY));

        var mainLinkExitMove:Tween = new Tween(mainLink, "y", Strong.easeOut, mainLink.y , -150, 3, true);          
        var gridExitMove:Tween = new Tween(grid, "y", Strong.easeOut, grid.y , -150, 3, true);

}

最后是调用上述函数的代码,并侦听返回的事件。 frontPage是FRONT_PAGE.as类的一个对象,在代码中先前声明。

function gotoSubPage(){
    frontPage.exitPage();

    frontPage.addEventListener(CustomEvents.PAGE_EMPTY, ef_FrontPageFinishedExiting);
    function ef_FrontPageFinishedExiting(event:CustomEvents){
        trace("Event has been caught");
    }
} 

我知道我到达了CustomEvents构造函数,因为它中的跟踪被打印出来。 问题是事件似乎没有到达函数调用者?

我无法找到如何使用简单自定义事件的好例子,所以这就是我认为应该如此。我做错了什么?

1 个答案:

答案 0 :(得分:0)

看起来它没有用,因为你在调用事件的方法之后正在监听事件,在马前推车:)

您还要在ef_FrontPageFinishedExiting内声明gotoSubPage,它应该在课程内的该方法之外。

请改为尝试:

function gotoSubPage() {
    frontPage.addEventListener(CustomEvents.PAGE_EMPTY, ef_FrontPageFinishedExiting);
    frontPage.exitPage();   
}

function ef_FrontPageFinishedExiting(event:CustomEvents) {
    trace("Event has been caught");
}

此外,当您有自定义事件时,最好还是覆盖克隆方法:

package
{
    import flash.events.Event;

    public class MyEvent extends Event
    {
        public static const SOMETHING_HAPPENED:String = "somethingHappened";

        public function MyEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
        {
            super(type, bubbles, cancelable);
        }

        override public function clone():Event
        {
            return new MyEvent( type, bubbles, cancelable );
        }
    }
}