• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ライブラリにある画像をaction scriptから呼び出して表示する)

action scriptでライブラリの画像を呼び出して表示する方法

このQ&Aのポイント
  • action script初心者にもわかりやすく説明します。test.flaファイルにはa.gif、b.gif、c.gifという画像がライブラリに読み込まれています。カードというレイヤーにアクションフレームを作成し、ランダムな数字を生成します。その結果に基づいて、特定の座標にa.gif、b.gif、c.gifを表示します。
  • レイヤー上に存在しないオブジェクトでも、ライブラリから画像を呼び出して表示する方法があります。トランプのシャッフルや手札の配布時に使えるアクションスクリプトです。
  • 質問内容に関する考え方の間違いも指摘しながら、わかりやすく解説します。初心者でも理解しやすいように説明しますので、ぜひ参考にしてください。

質問者が選んだベストアンサー

  • ベストアンサー
noname#35109
noname#35109
回答No.1

考え方は全く間違っていないと思います。 そのまま延長すればできます。 --- ライブラリから呼び出す方法 --- GIFのままだと,ライブラリから呼び出せないので, まず, そのGIFを一度ステージ上に全部呼び出して, 1つ1つをムービークリップシンボルに変換してください。 変換した後は,ステージ上から消して良いです。 ムービークリップシンボルに変換すると, ライブラリの中にもそのムービークリップシンボルが入りますよね。 それを呼び出します。 次に, 変換したムービークリップシンボルのうち1つを選択し, 「右クリック」→「リンケージ」よりリンケージの設定をします。 リンケージプロパティのパネルより,  リンケージ:□ActionScriptに書き出し という部分の □ にチェックを入れてください。 すると,   □最初のフレームに書き出し というのにもチェックが入ります。 とりあえずそれで良いと思います。 そして,その上の 識別子:[         ] という部分に,任意の識別子を付けてください。 ここでは,『gif1』という識別子にしたとします。 他のGIFの入ったムービークリップも同様にします。 それぞれの識別子は別の名前にしてください。 ここでは,他の物は『gif2』『gif3』という識別子にしたとします。 ここまで来ると準備が整ったので,スクリプトを書きます。 質問者様が書かれているスクリプトをそのまま利用して, その後に,ライブラリから呼び出し,整列させるスクリプトを付け加えると以下のようになります。 ------------------------------------ card1 = Math.floor(Math.random()*3)+1; card2 = Math.floor(Math.random()*3)+1; card3 = Math.floor(Math.random()*3)+1; _root.attachMovie("gif"+card1,"G1",1); _root.attachMovie("gif"+card2,"G2",2); _root.attachMovie("gif"+card3,"G3",3); _root.G1._x = 150; _root.G1._y =100; _root.G2._x = 250; _root.G2._y =100; _root.G3._x = 350; _root.G3._y =100; ------------------------------------ 4行目~6行目が,ライブラリからムービークリップを呼び出すスクリプトです。 構文は,ヘルプなどで調べてもらうとわかりますが, MovieClip.attachMovie("リンケージの識別子","新しいインスタンス名",深度); です。 "リンケージの識別子" の部分を, "gif"+card1 のようにしていますが, もし,card1 の値が 1 であれば, gif1 が, もし,card1 の値が 2 であれば, gif2 が, もし,card1 の値が 3 であれば, gif3 が, それぞれ呼び出されます。 リンケージの識別子を付けるときに,最後に連番を付けておくと, if文で分岐させる必要がなくなります。 呼び出されたものは,何も指定しないと,座標 (x,y)=(0,0) に表示出されます。 それでは困るので, 7行目~12行目で,座標を指定しています。 座標は,作る物によって全く変わるので,適当に数値を変えてください。 また,card1~card3 のように 3枚くらいであれば,上のように羅列したスクリプトでも良いですが, もっと card が増えると for文 などでループさせるほうが良いと思います。 こんな感じです↓。 ------------------------------------ for(var i=1;i<=3;i++){ _root["card"+i] = Math.floor(Math.random()*3)+1; _root.attachMovie("gif"+_root["card"+i],"G"+i,i); } _root.G1._x = 150; _root.G1._y =100; _root.G2._x = 250; _root.G2._y =100; _root.G3._x = 350; _root.G3._y =100; ------------------------------------ 上のスクリプトの上から6行が4行に短縮されます。 もっと,card が増えたとしても,for(var i=1;i<=3;i++) の i<=3 の 3 を変えるだけです。 下の6行も規則正しいものならば,for文の中に入れられますが, 座標がどうなるかはわからないため,for文にはしませんでした。

tukikageran
質問者

お礼

ありがとうございました。 大変わかりやすい説明をしていただいて助かりました。 カードの初期配置をすることが出来ました。 また一つ壁にぶつかってしまったのですが、それはまた 別の質問でさせていただきます。 ありがとうございました。

関連するQ&A