質問: Math.floor(Math.random()*3) + 1; といれてランダムの1~3の数字を出しました。 この結果に基づいて、特定の座標に結果が1の場合a.gifを、 結果が2の場合はb.gifを、3の場合はc.gifを表示したいと 思います。 すでにレイヤー上に存在しているオブジェクトであれば、 位置情報をいれてそこに置くだけなのですが、なにぶんどの カードが表示されるか決められてないのでオブジェクトは レイヤー上においてありません。 ライブラリから呼び出して表示する命令はありますでしょうか? 状況としてはトランプでシャッフルして最初の手札を配る時に どういう風にして表示したらよいかということになります。 考え方の間違いなどあるかもしれませんが、その点も指摘して いただいた上で解説していただけると助かります。 よろしくお願いします。
回答: 考え方は全く間違っていないと思います。 そのまま延長すればできます。 --- ライブラリから呼び出す方法 --- 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文にはしませんでした。