Flashが実行される順番





this is flash contents.

昨日の記事ですっかりonLoadってのを忘れてた...
基本的なスクリプトが実行される順番を確認しておこう.

  • 1.上の階層から下の階層のMCの順にコンストラクタが実行される
  • 2.上の階層を優先にonClipEvent(load)イベントが実行される
  • 3.上の階層を優先にonLoadイベントが実行される
  • 4.上の階層を優先にタイムライン1フレーム目が実行される

1コンストラクタが実行されたときにはもちろんTestクラスを継承している.
なのでonLoadイベントハンドラが実行されたときにはそのインスタンスが持つ全ての下階層のインスタンスはいろいろ準備が整ってる.

ただ,onLoadも上の階層から実行していくので,BのインスタンスがCのインスタンスをb_mc.onLoadで設定すると,a_mcからc_mcの準備ができた状態でアクセスするにはちょっと工夫をしてあげないとならないのかな...


追記)2006.04.12 18:38
muneさんからonClipEvent(initialize)ってのもあるよーといわれたので追加しました.
とにもかくにもまず最初に呼び出されるみたいです.
コンストラクタとか

rakeemさんの記事でも見っけました.
A LOT | initializeってヤバイね。

// class Test
class Test extends MovieClip {
  private static var extendFlag:Boolean = false;
  
  public function Test() {
    _root.debug_txt.write(this + ' constructor executed.');
    this.isExtend();
  }

  public function onLoad():Void {
    _root.debug_txt.write(this + ' onLoad executed.');
    this.isExtend();
  }
  
  public function isExtend():Void {
    if (Test.extendFlag)
      return;

    _root.debug_txt.write('----------------');
    _root.debug_txt.write('  A : instanceof Test -> ' + (_root.a_mc instanceof Test));
    _root.debug_txt.write('  B : instanceof Test -> ' + (_root.a_mc.b_mc instanceof Test));
    _root.debug_txt.write('  C : instanceof Test -> ' + (_root.a_mc.b_mc.c_mc instanceof Test));
    _root.debug_txt.write('----------------');

    if (_root.a_mc instanceof Test and
      _root.a_mc.b_mc instanceof Test and
      _root.a_mc.b_mc.c_mc instanceof Test) {
      
      Test.extendFlag = true;
    }
  }
}

download source


contributor nao : 2006年04月11日 15:07

trackback

trackback for this entry URL:
http://blog.graffiti-web.org/mt/mt-tb.cgi/406

comment