我对在网上找到的代码感到非常不舒服
myTM.addEventListener("allTransitionsInDone", doneTrans);
(myTM是一个TransitionManager实例。)在完成非运动转换(如淡入淡出)时触发事件的正确方法是什么?我通常使用{{1}但是这个不会出现。
答案 0 :(得分:3)
事件名称的常量是按照约定在事件类型上定义的,例如,“mouseDown”事件是MouseEvent.MOUSE_DOWN。
然而,'allTransitionsInDone'具体实际上没有常数,因为它(有点,见livedocs的注释)没有记录。因此,没有.ALL_TRANSITIONS_IN_DONE常量。
答案 1 :(得分:1)
除了Simon的答案之外,如果你想避免“松散引用”的事件名称并定义你自己的事件名称,这里有一些传统方法的不同命题:
<强> 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));
}
}
}