onClipEvent(load)で自分自身にloadMovieしてはいけません [Edit]

onClipEvent (load)ハンドラ内で、自分自身(this)をターゲットとしてMovieClip.loadメソッドを実行してはいけません。外部ファイル(SWFまたはJPEG)がロードされると、また新たにloadイベントが発生するので、永久に処理が終わらないからです。

と、これだけで説明はよいのですが、AYAさんにウケたので、その状況をこんな風にたとえてみました。

// MovieClipアクション
onClipEvent (load) {
   trace(this._url);  // 確認用
   this.loadMovie("test.swf");
}

MovieClipアクションでは、onClipEvent (load)イベントハンドラは、そのMovieClipがステージに登場する直前に呼出されます。つまり、MovieClipが舞台に登場しようと、袖にスタンバった瞬間に実行される訳です。

ところが、MovieClip.loadMovieメソッドは、役者を入替える操作になります。いってみれば、監督命令で「MovieClipが袖にスタンバった瞬間に、そいつを張っ倒して誰か別の役者が代われ」といったのと同じです。

張っ倒して代役に収まった誰かも、舞台登場に備えてスタンバらなければなりません。監督命令は、いまだに有効です。すなわち、その瞬間つぎの誰かが背後から襲いかかります。監督命令は絶対ですから、ゴルゴ13の背後に立った人間と同様、袖に立ったが最後、必ず殴り倒されるのです。

その惨劇の跡は、確認用に挿入したtraceアクションが伝えてくれるはずです。

コメント

この記事へのコメント

  1. 1.オキ(2003年10月28日 16:32)

    激しくワラタです。比喩もひとつの芸ですね。

  2. 2.野中文雄(2003年10月29日 03:32)

    ActionScript界の大道芸人とも呼ばれています。(^^;

  3. 3.岡本(2003年10月29日 13:09)

    わかりやすい表現・・・いいです(笑)

  4. 4.サブリン(2003年10月29日 13:40)

    人に教えるのって、いかにその人にヒットする比喩のパターンが出せるかだと思うんですよねえ。才能です。

  5. 5.A(2003年10月30日 08:07)

    何度読んでも、スタンばったとたんに張り倒される不幸な俳優さんの姿には泪すら覚えてしまいます。 
    MCさんの気持ちも考慮したActionScript作りが大切だということを教えてくれる、よい例ですね。 

その他の記事