- 締切済み
loadMovieで・・・
loadMovieで A.swf という背景の x=200 Y=400の位置に B.swf を表示させたいときは どのようなアクションスプリクトを 書けばいいのでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- DPE
- ベストアンサー率85% (666/776)
#1です。 どのように作成なさっているかが分からないことには、そのような怪現象については何も言えませんが。 1つ心当たりがあるとすれば、背景画像と B.swf を受け取るムービークリップの重なり順の問題です。 例えば A.swf のレイヤー構成が レイヤー1 レイヤー2 となっていて、レイヤー1に背景画像を、レイヤー2にムービークリップを置いていると、たとえ正常に読み込まれても B.swf は背景画像の下に表示されて見えなくなってしまいます。 レイヤーは上にあるものほど、上に重なって表示されます。 背景とムービークリップのレイヤーを分けていて、ムービークリップのレイヤーが背景よりも下になっているようであれば、レイヤーの重なり順を変更してください。 タイムラインの横に並んでいるレイヤー名の部分をドラッグすると、重なり順を変更できます。 ムービークリップのレイヤーを、背景を置いたレイヤーよりも上に移動してください。 ------------------------------------------------------------ もう1つ可能性があるとすれば、loadMovie による読み込みが失敗している可能性です。 B.swf を読み込むムービークリップには絵がありませんので、読み込みに失敗するとまるで A.swf が B.swf に重なっているように見えます。 読み込みが失敗する原因はいくつか考えられます。 よくある原因は、loadMovie で指定しているムービークリップの名前(正確には”参照”といいます)と、実際にステージにあるムービークリップのインスタンス名が違っていることです。 loadMovie の2番目で指定しているパラメータ(#1の例では” load_clip ”)と、ステージに配置したインスタンスに付けたインスタンス名が一致しているかどうかを確認してみてください。 大文字・小文字は区別されます。 例えば load_Clip と load_clip は別のものと見なされます。 このような些細な間違いにもご注意ください。 なお、#1の文中では” load_clip ”の前後に半角のスペースを入れて書いていますが、ムービーでインスタンス名を付ける時は半角のスペースを入れないようにしてください。 特に、インスタンス名の最初に半角のスペースが混入していると、スクリプトではエラーになりませんが、正常に実行されません。 ************************************* もう1つよくある原因は、ファイル名やフォルダ名の指定が間違っていることです。 これは主に、HTML ページ内に loadMovie を使う swf ファイルを配置する時、swf ファイルと HTML ファイルが違うフォルダにある場合によく起こります。 例えば、フォルダの構成が mysite ┃└ A.html ┃ ┗ swf ├ A.swf └ B.swf このようになっている場合は、A.swf 内で B.swf を読み込むには A.html から見た B.swf の位置を指定します。 具体的に書くならば loadMovie( "./swf/B.swf" , load_clip ); です。 「ムービープレビュー」ではURLオープンエラーになることがあります。 HTML ファイルを作り、ブラウザで確認してみてください。 サーバーにアップロードする際も、フォルダの名前や階層構造を間違えないようにご注意ください。 名前の大文字・小文字が違っているだけでも、読み込みは上手くいきません。 ************************************* あとは、あまりないと思うのですが、ムービークリップが透明になっていて見えない可能性です。 ムービークリップのインスタンス” load_clip ”を選択した状態で、「プロパティ」パネルの右側を見てください。 「カラー:」というリストがあるかと思いますが、ここで”アルファ”が選択されていませんでしょうか? ”アルファ”が選択されているようでしたら、このリストから”なし”を選択してください。 B.swf の最初のフレームが空白のキーフレームで、最初のフレームに stop(); が書かれていても、まあ、B.swf が見えないようにはなりますが、これはもっと考えにくいかと思います。 さしあたって、考えられる原因を書いてみましたが。 上記に該当しない場合は、 ・レイヤーの重なり順やムービークリップをどのように作っているか。 ムービークリップを入れ子にしている場合は、その構造や名前などを詳しく。 ・「ムービープレビュー」やパブリッシュの際にエラーが報告されるようであれば、どんな内容のエラーか。 ・ B.swf が本当に読み込めているのかどうか。 →例えば、「ムービープレビュー」では正常なのに HTML ページに配置したりサーバーにアップすると読み込めない・「ムービープレビュー」でURLオープンエラーが報告される、など など、もう少し詳しい状況を補足してください。 回答できることであれば、追加の回答はいたします。
- DPE
- ベストアンサー率85% (666/776)
お使いの Flash のバージョンが書かれていませんが、とりあえず Flash MX 以降として話を進めます。 簡単なのは、A.swf に空っぽのムービークリップを作って最初からX= 200 ・Y= 400 の位置に置いておき、これに loadMovie で B.swf を読み込むことです。 空っぽのムービークリップには、位置の情報はありますが大きさはありません。 このムービークリップの大きさは、読み込んだ swf ファイルや画像の大きさで決まります。 読み込んだ外部ファイルは、その左上の部分が読み込み先のムービークリップの基準点(画面では+マークで表されます)の位置に来るように配置されます。 ですから、外部ファイルを受け取るムービークリップシンボルを作る時は基準点の位置にも気を付けなければなりません。 しかし、空っぽのムービークリップはただの点のようなものですから、基準点に関しては深く考える必要がないことも利点の1つです。 --------------------------------------------------------------- まず、空っぽのムービークリップシンボルを作ります。 Flash のバージョンによってはスクリプトで作成することもできますが、ここではシンボルとして作ります。 メニューの「挿入」→「新規シンボル」を選ぶと、新しいシンボルを作成できます。 「名前:」は「ライブラリ」パネルで表示される時の名前になります。何か分かりやすい名前を付けてください。日本語でも構いません。 「タイプ:」のラジオボタンで”ムービークリップ”を選択し、「 OK 」を押します。 シンボルの編集画面になりますが、絵やスクリプトは必要ありませんので、何もせずそのままムービーの編集に戻ってください。 タイムラインの上に、編集中のシーン名とシンボル名が書かれている部分があります。 これはボタンになっていますから、シーン名をクリックしてください。シンボルの編集を終了し、ムービーの編集に戻ります。 「ライブラリ」パネルを見ると、上記の作業でできたムービークリップシンボルが1つ、登録されているはずです。 このシンボルをステージにドラッグして、ムービー内に配置します。 絵がないために○印と+印が重なったマークで表示されますが、これは正常です。 Flash MX 以降をお使いの場合は、デフォルトのパネル配置ではステージの下に「プロパティ」というパネルが表示されています。 このパネルには選択した対象に関する様々な情報が表示されます。情報を編集して、位置や設定などを変更することもできます。 B.swf を読み込むためのムービークリップ(画面では、○と+が重なったマーク)を選択した状態で、「プロパティ」パネルを見てください。 左側に、W: ・ H: ・ X: ・ Y: と書かれた項目があります。 対象の幅・高さ・X座標・Y座標を表しており、数値を入力すると大きさや表示位置を正確に指定できます。 W: と H: は0になっていますが、絵がなく大きさがないムービークリップなのでこれは当然です。 W: と H: はいじらず、X: と Y: の項目に、B.swf を表示したい位置を入力してください。ムービークリップが指定の場所に移動します。 「ライブラリ」パネルからシンボルをドラッグした時は、そのシンボルの分身が自動的に作られてムービー内に配置されます。 この分身のことを”インスタンス”といいます。 インスタンスには名前を付けることができます。 この名前は、ActionScript でインスタンスを操作する時に必要になります。 インスタンスの名前は、先の大きさや座標を指定する項目のすぐ上にある枠(最初は、<インスタンス名> という仮の文字が入っています)に入力して付けます。 日本語はトラブルの元になるので、半角の英数字と” _ ”だけで何か名前を付けてください。 ここでは仮に、” load_clip ”と付けたとします。 **************************************************** 次に、ムービークリップのインスタンス” load_clip ”に外部ファイルの B.swf を読み込むスクリプトを書きます。 なお、外部ファイルを受け取るムービークリップと同じフレームに loadMovie を書くと、稀に、ムービークリップ(今回の例では” load_clip ”)がステージに登場するより先に loadMovie アクションが実行されてしまい、ムービークリップが存在していないために読み込みが失敗することがあります。 例えばムービーが2フレームでできている場合ですと、ムービークリップはフレーム1から2まで登場させ loadMovie はフレーム2に書くようにすれば、loadMovie が実行される時にはムービークリップが必ず存在していることになり、安全かと思います。 タイムラインで、先述の空っぽのムービークリップを配置したレイヤーを見てください。 ムービークリップが配置されているフレームが、●で表されていると思います。 その次のフレームを選択し、右クリック( Mac では control +クリック)で出すメニューから「フレームを挿入」でフレームを追加します。 タイムラインにスクリプトを書く時は、スクリプト専用のレイヤーを1つ作っておくと管理しやすくなります。 レイヤーを追加し、空白のキーフレームを2つ作ります。 その2つめのキーフレームにスクリプトを書きます。 まとめますと、タイムラインの内容は スクリプト用 :○a ムービークリップ:●□ こんな感じになります。 フレームにスクリプトを書くと、タイムラインにはaのマークが表示されます。 また、空白のキーフレーム(絵のないキーフレーム)は○で表されます。 スクリプトは次のようになります。 このスクリプトは、メインのタイムラインのフレームに設定してください。 (↓各行頭に全角のスペースが入っています。コピーする際は、全て半角のスペースかタブに置き換えてください。このまま使うとシンタックスエラーになります) //ムービーを読み込む loadMovie( "B.swf" , load_clip ); //タイムラインはここで止めておく stop(); 仮にムービーが2フレームでできているとすると、フレーム2が再生された後は、何もしなければ勝手にループしてフレーム1に戻ってしまうことがあります。 フレーム2に再生ヘッドを止める stop(); アクションを入れておくと、確実にループを防止できます。 **************************************************** ここでご紹介した作例は、指定の場所に B.swf を読み込んで単純に表示するだけの話で、読み込みの完了を待つ処理は省略しています。 例えば外部から読み込んだ画像をボタンにして何かをしたり、読み込んだムービーに含まれていたムービーやボタンを操作するといった作品では、必ず、読み込みが終了するまで待ってから次の処理に進むようにしましょう。 外部から何かを読み込む時は、たとえ回線を介さずオフラインで見る時であっても、また、どんなに容量が小さなファイルでも、少なからず時間がかかるものです。 loadMovie は”~を読み込め”という命令を出すだけで終了し、すぐに次のスクリプトの実行に進みます。 読み込みを待つ処理を作らずに先に進むと、利用しようとしていたものがまだ読み込まれていないために次の処理が上手く動かないなどの不具合の原因になります。 読み込み終了を待つ処理の作り方は様々で、お使いの Flash のバージョンによって使える命令も効率も違います。 Flash Player 7 以降、作成ツールで言うと Flash MX 2004 か Flash 8 では、loadMovie を強化した MovieClipLoader という命令(正確には”クラス”といいます)が使えます。 画像や swf ファイルの読み込みを専門に担当する、いうなれば読み込みのプロのようなもので、loadMovie よりも器用な読み込みの処理を作ることもできます。 興味がありましたら研究してみてください。
お礼
えっと・・・ なぜかA.swfが上に出てきて B.swfが見えないのですが・・・ どうしたらよいでしょうか・・