Macromedia Flash非公式テクニカルノート 外部SWFムービー内のfunctionをロード直後に呼出す
Platform: All 外部SWFムービーの中に定義された'function'を、'MovieClip.loadMovie'メソッドでロードした直後に呼出したい場合があります。けれど、メソッドを実行した直後に'function'を呼出そうとしても、呼出せません。SWFの読込みが'function'を実行できる段階にまで至っていないからです。 1. onClipEvent (load)はターゲットのMovieClip登場時にも呼出される けれども、'onClipEvent (load)'イベントハンドラは、外部SWFを読込む前に、そのターゲットのMovieClipがフレームに登場したときにも1度呼出されます。外部SWFをロードしたときだけ処理を実行したいとすれば、その判別のためのスクリプトを書かなければなりません。。
2. MovieClip.onLoadイベントハンドラメソッドは呼出されない けれども、このイベントハンドラメソッドは、'MovieClip.loadMovie'メソッドと組合わせて使うことができません。なぜなら、外部SWFムービーがロードされると、ユーザーの定義したすべての変数やプロパティがクリアされます。'MovieClip.onLoad'イベントハンドラメソッドの定義も、このクリアされるプロパティに含まれるのです。 したがって、SWFの読込みが完了したときには、このイベントハンドラメソッドの定義がクリアされてしまい、設定した処理は実行されません。
3. setIntervalアクションを使う
'setInterval'アクションは、つぎのように設定します。 setInterval(関数, 実行間隔); [関数]には、関数名を指定するか、'function'を直接記述(「名前のない関数(匿名関数/関数リテラル)」で指定)します。その関数の中に必要な処理を記述します。[実行間隔]は、関数を繰返し実行する間隔をミリ秒で指定します。 今回は、一旦ロードが完了すれば、それ以降ロード確認の処理は必要ありません。つまり、実行する関数は、いわば使い捨てです。こうした場合には、ユーザー定義関数を設定してその関数名を指定するより、'function'を直接記述する方が簡単です。 'function'を直接記述する場合のスクリプトのスタイルは、以下のようになります。'function'の内容が見やすいように、改行を入れてあります。 nID = setInterval(function ()
{ [ステートメント]には、通常のユーザー定義関数と同様に、複数のステートメントを記述することができます。'setInterval'アクションを定義すると、その設定を識別するための整数IDが返されます。この整数IDは、'setInterval'アクションの定義をクリアしたいときに使用します。 外部SWFムービーをロードするターゲットのMovieCliptがメインのタイムラインに配置されたインスタンスmy_mc、SWF内に定義されている'function'の名前はxTestだとすると、つぎのようなスクリプトになります。 // _root: メインのタイムライン 'setInterval'アクションに指定した'if'条件で、'function'が未定義かどうかを判別しています。'function'の準備がまだできていなければ、'function'を調べたときに未定義値'undefined'が返ります。
'undefined'でなければ、'function'の準備は整ったことになります。そこで、'function'を実行したうえで、'clearInterval'アクションにより'setInterval'の定義をクリアします。 4. setIntervalアクションの定義をクリアする 'setInterval'の関数実行をクリアするのが、'clearInterval'アクションです。'clearInterval'を実行する際には、クリアする'setInterval'アクションを識別するための整数IDを引数として指定する必要があります。 'clearInterval'アクションと組合わせた'setInterval'の標準的な定義スタイルは、つぎのようになります。 nID = setInterval(function () { なお、処理の内容によっては'setInterval'の識別IDを別途変数に格納しておいて、'setInterval'に定義した関数の外からクリアする場合もありえます。 _____ 作成者: 野中文雄 Copyright © 2001-2006 Fumio Nonaka. All rights reserved. |
|||||||