• ベストアンサー
  • 困ってます

ライブラリにある画像をaction scriptから呼び出して表示する

  • 質問No.1795976
  • 閲覧数1185
  • ありがとう数5
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 67% (365/541)

action script初心者ですのでわかりやすく説明していただけると助かります。

今、test.flaというファイルがあり、その中にa.gif、b.gif、c.gifというファイルをライブラリに読み込んでいます。

ここで、カードというレイヤーを作り、そのアクションフレームに
card1 = Math.floor(Math.random()*3) + 1;
card2 = Math.floor(Math.random()*3) + 1;
card3 = Math.floor(Math.random()*3) + 1;
といれてランダムの1~3の数字を出しました。
この結果に基づいて、特定の座標に結果が1の場合a.gifを、
結果が2の場合はb.gifを、3の場合はc.gifを表示したいと
思います。
すでにレイヤー上に存在しているオブジェクトであれば、
位置情報をいれてそこに置くだけなのですが、なにぶんどの
カードが表示されるか決められてないのでオブジェクトは
レイヤー上においてありません。
ライブラリから呼び出して表示する命令はありますでしょうか?

状況としてはトランプでシャッフルして最初の手札を配る時に
どういう風にして表示したらよいかということになります。

考え方の間違いなどあるかもしれませんが、その点も指摘して
いただいた上で解説していただけると助かります。

よろしくお願いします。

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

  • 回答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

お礼率 67% (365/541)

ありがとうございました。
大変わかりやすい説明をしていただいて助かりました。
カードの初期配置をすることが出来ました。

また一つ壁にぶつかってしまったのですが、それはまた
別の質問でさせていただきます。
ありがとうございました。
投稿日時:2005/11/23 17:31
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ