問題
共有ライブラリから読込んだシンボルのインスタンスが、MovieClip.attachMovieまたはMovieClip.attchSoundメソッドを使って作成できません。
原因
attachMovieやattachSoundメソッドは、ライブラリからシンボルのインスタンスを作成するために使用されます。このとき共有シンボルのリンケージは、[シンボルプロパティ](MXの場合。以下同様。Flash 5では[シンボルリンケージプロパティ])ダイアログで[ランタイム共有用に書き出し](Flash 5では[このシンボルを書き出す])に設定しておく必要があります。共有ライブラリから読込んだシンボルのリンケージは、デフォルトで[ランタイム共有用に読み込み](Flash 5では[URLからこのシンボルを読み込む])になります。
ところが、読込んだ(共有)シンボルは、attachSoundまたはattachMovieメソッドが使えるように書き出すことはできません。
対処法
読込んだ(共有)シンボルのインスタンスを、オーサリングの段階でタイムラインに別途配置しておく必要があります。ActionScriptを使えば、_visibleといったインスタンスのプロパティを設定して、ステージ上での表示/非表示をプログラム的にコントロールすることも可能です。attachSoundやattchMovieは、再生中のムービーの[ライブラリ]から書き出されたシンボルのインスタンスのみを作成することができるのです。
[訳者註] 共有ライブラリの[ランタイム共有用に書き出し]されたシンボルをムービーの[ライブラリ]に直接ドラッグして、[ランタイム共有用に読み込み](デフォルト)の設定にしただけでは、MovieClip.attachMovie()やSound.attachSound()でダイナミックに配置することはできません。
そのシンボルのインスタンスを、タイムラインのメソッドを実行する前のフレームに配置しておく必要があります。これは、リンケージ設定で[ActionScriptに書き出し]て、[最初のフレームに書き出し]をオフにした場合と同じ理由によるものと考えられます。つまり、タイムラインに配置しないと、シンボルがSWFに書き出されないからでしょう。
[訳者註2] Sound.attachSoound()メソッドについては、生成するSoundインスタンスのターゲットを、ロードしたSWFのパスで指定すれば動作します。この場合、共有シンボルに設定する必要はありません。
var my_sound:Sound = new Sound(リンケージサウンドが含まれるSWFをロードしたレベルまたはインスタンス);
my_sound.attachSound(リンケージ識別子);
my_sound.start();
|
|
補足情報
ライブラリオプションのリンケージプロパティの設定や共有ライブラリの使い方の概要については、「共有ライブラリの使用方法」(テクニカルノート:
fl0250)をご覧ください。また、「ActionScript辞書」のMovieClip.attachMovieおよびSound.attachSoundの項も併せてご参照ください。
出典
「Shared symbols cannot be instanced using attachMovie or attachSound」を邦訳。
_____
作成者: 野中文雄
更新日: 2004年8月8日 字句修正および訳者註2の追加
作成日: 2003年7月25日