我对我在网上找到的这样的代码感到非常不舒服
myTM.addEventListener("allTransitionsInDone", doneTrans);
(myTM 是一个 TransitionManager 实例。)当非运动转换(如淡入淡出)完成时,触发事件的正确方法是什么?我通常使用Event.EVENT_NAME
,但这个没有出现。
我对我在网上找到的这样的代码感到非常不舒服
myTM.addEventListener("allTransitionsInDone", doneTrans);
(myTM 是一个 TransitionManager 实例。)当非运动转换(如淡入淡出)完成时,触发事件的正确方法是什么?我通常使用Event.EVENT_NAME
,但这个没有出现。
事件名称的常量是按照约定在事件类型上定义的,例如,“mouseDown”事件是 MouseEvent.MOUSE_DOWN。
但是,“allTransitionsInDone”实际上没有常数,因为它(有点,参见livedocs上的评论)没有记录。因此没有 .ALL_TRANSITIONS_IN_DONE 常量。
添加到西蒙的回答中,如果您想避免“松散引用”的事件名称并定义自己的事件名称,这里有一些使用这些传统方法的不同建议:
1. 创建自定义事件子类 flash.events.Event
可能是最传统和最明显的方式,尽管有点浪费代码。
package transitions.events
{
import flash.events.Event;
public class MyTransitionEvent extends Event
{
public static const TRANSITION_INIT : String = "events.TransitionEvent.transitionInit";
public static const TRANSITION_PROGRESS : String = "events.TransitionEvent.transitionProgress";
public static const TRANSITION_COMPLETE : String = "events.TransitionEvent.transitionComplete";
public function MyTransitionEvent(type : String, bubbles : Boolean, cancelable : Boolean)
{
super(type, bubbles, cancelable);
}
override public function clone() : Event
{
return new TransitionEvent(type, bubbles, cancelable);
}
}
}
2. 将事件名称定义为事件调度程序中的静态常量(例如 Sprite 或 MovieClip 的子类)
为了使事情更清楚,事件类型应该专门从事件被调度的类中定义。
package
{
import flash.events.Event;
import flash.events.EventDispatcher;
public class Transition extends EventDispatcher
{
public static const TRANSITION_INIT : String = "events.TransitionEvent.transitionInit";
public static const TRANSITION_UPDATE : String = "events.TransitionEvent.transitionUpdate";
public static const TRANSITION_COMPLETE : String = "events.TransitionEvent.transitionComplete";
public function Transition()
{
}
private function init() : void
{
dispatchEvent(new Event(TRANSITION_INIT))
}
}
}
3.复用原生的flash.events
幸运的是,预定义的事件(即flash.events.Event、flash.events.StatusEvent、flash.events.NetStatusEvent等)涵盖了大多数可能的情况。因此,为了不重新发明轮子并节省一些宝贵的代码行,如果您找到符合您要求的代码,只需重用它即可。
package
{
import flash.events.Event;
import flash.events.EventDispatcher;
public class Transition extends EventDispatcher
{
public function Transition()
{
}
private function init() : void
{
dispatchEvent(new Event(Event.INIT));
}
private function change():void
{
dispatchEvent(new Event(Event.CHANGE));
}
private function complete():void
{
dispatchEvent(new Event(Event.COMPLETE));
}
}
}