このようにネットで見つけたコードにはかなり違和感を覚えます
myTM.addEventListener("allTransitionsInDone", doneTrans);
(myTM は TransitionManager インスタンスです。)モーション以外のトランジション (フェードなど) が行われたときにイベントを発生させる正しい方法は何ですか? 普段は使っていますEvent.EVENT_NAME
が、これは出てきません。
このようにネットで見つけたコードにはかなり違和感を覚えます
myTM.addEventListener("allTransitionsInDone", doneTrans);
(myTM は TransitionManager インスタンスです。)モーション以外のトランジション (フェードなど) が行われたときにイベントを発生させる正しい方法は何ですか? 普段は使っていますEvent.EVENT_NAME
が、これは出てきません。
イベント名の定数は、慣習によりイベント タイプで定義されます。たとえば、「mouseDown」イベントは MouseEvent.MOUSE_DOWN です。
ただし、「 allTransitionsInDone」には具体的には実際には定数がありません。これは、(ライブドキュメントのコメントを参照してください)文書化されていないためです。したがって、.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));
}
}
}