毎フレームごとに発生するEventに関するお話。
元ネタはMy Coding Life – The MovieClip life cycle, Event.FRAME_CONSTRUCTED, and Event.EXIT_FRAME.です。
以下のコードをフレームスクリプトに書いてテストしてみました。
Flash CS4 + Flash Player 10.0 r45
function onEvent (e:Event):void { trace(e); } addEventListener(Event.ENTER_FRAME, onEvent); addEventListener(Event.EXIT_FRAME, onEvent); addEventListener(Event.FRAME_CONSTRUCTED, onEvent); |
出力
[Event type="exitFrame" bubbles=false cancelable=false eventPhase=2] [Event type="enterFrame" bubbles=false cancelable=false eventPhase=2] [Event type="frameConstructed" bubbles=false cancelable=false eventPhase=2] |
livedocによると…
http://help.adobe.com/ja_JP/Flash/CS5/AS3LR/flash/display/DisplayObject.html#event:enterFrame
どうでもいいけどEvent
の説明だと何の役にもたちません。DisplayObject
でようやく意味ありげな日本語に遭遇できます。
もっとましな日本語にならないのかなぁ。
作文のテストだったら10点以下だよね。
enterFrame
[ブロードキャストイベント] 再生ヘッドが新しいフレームに入るときに送出されます。再生ヘッドが移動しない場合、またはフレームが 1 つしか存在しない場合、このイベントはフレームレートに合わせて継続的に送出されます。 このイベントはブロードキャストイベントであるため、このイベントに登録されているリスナーを持つすべての表示イベントによって送出されます。
exitFrame
[ブロードキャストイベント] 再生ヘッドが現在のフレームを終了するときに送出されます。すべてのフレームスクリプトが実行されています。再生ヘッドが移動しない場合、またはフレームが 1 つしか存在しない場合、このイベントはフレームレートに合わせて継続的に送出されます。このイベントはブロードキャストイベントであるため、このイベントに登録されているリスナーを持つすべての表示イベントによって送出されます。
frameConstructed
[ブロードキャストイベント] フレーム表示オブジェクトのコンストラクターが実行した後で、かつフレームスクリプトが実行される前に送出されます。再生ヘッドが移動しない場合、またはフレームが 1 つしか存在しない場合、このイベントはフレームレートに合わせて継続的に送出されます。 このイベントはブロードキャストイベントであるため、このイベントに登録されているリスナーを持つすべての表示イベントによって送出されます。
これだとイベントの発生順序は以下のようになる気がするんだけど・・・
1.Event.FRAME_CONSTRUCTED
2.Event.ENTER_FRAME
3.Event.EXIT_FRAME
実行結果は違ってた。
1.Event.EXIT_FRAME
2.Event.ENTER_FRAME
3.Event.FRAME_CONSTRUCTED
で、この3つのイベントを同時に使う場面ってどんな時だろ?
1つしか使わない時はEvent.EXIT_FRAME, Event.ENTER_FRAME, Event.FRAME_CONSTRUCTED
のうちどれを使うのが正解なんでしょ?
感覚的にはEvent.EXIT_FRAME
を使いたいな、元Director使いとしては。
2010-07-08
コメントを参考に検証した結果。
[Event type="enterFrame" bubbles=false cancelable=false eventPhase=2] [Event type="frameConstructed" bubbles=false cancelable=false eventPhase=2] // frame script [Event type="exitFrame" bubbles=false cancelable=false eventPhase=2] |
1. Event.ENTER_FRAME
2. Event.FRAME_CONSTRUCTED
3. frame script
4. Event.EXIT_FRAME
1 -> 2 -> 3 -> 4 -> 1 -> 2 -> 4 -> 1 ......
Event.FRAME_CONSTRUCTED
のあと、フレームスクリプトを実行して Event.EXIT_FRAME
。あとはイベントがループする。
ありがたい。
2010.07.08 08:41
失礼します。
実行結果で EXIT_FRAME が最初に来るのは
addEventListenerした時点で
ENTER_FRAME と FRAME_CONSTRUCTED イベントが
既に発行済みで、最後に来る EXIT_FRAME が最初に拾われたせいかと。
———————————————
[フレーム 1]
(Event.ENTER_FRAME) ←リスナーが無いので拾われない
(Event.FRAME_CONSTRUCTED) ←リスナーが無いので拾われない
addEventListener(Event.ENTER_FRAME, onEvent);
addEventListener(Event.EXIT_FRAME, onEvent);
addEventListener(Event.FRAME_CONSTRUCTED, onEvent);
1.Event.EXIT_FRAME ←リスナーがあるので拾われる
———————————————
[フレーム 2]
2.Event.ENTER_FRAME
3.Event.FRAME_CONSTRUCTED
4.Event.EXIT_FRAME
———————————————
[フレーム 3]
:
:
2010.07.08 09:02
う〜む、なるほど。
そうすると、フレームに入る前に設定するんですね。
ありがとうございます。