我创建了一个自定义事件,当一个类中的特定函数被执行时,该事件应该被触发。我从我的主脚本中听取了这个事件,构成了我的时间轴之一。请参阅代码以更好地理解我的问题。
我的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构造函数,因为它中的跟踪被打印出来。 问题是事件似乎没有到达函数调用者?
我无法找到如何使用简单自定义事件的好例子,所以这就是我认为应该如此。我做错了什么?
答案 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 );
}
}
}