• ベストアンサー

変数により画像を変更

FLASH MXを使用しています。 ボタンを押すと変数に値が入り、その値によって表示する画像を変更したいと思っています。 ボタンが押されていない場合は画像は表示せず、ボタンが押されると変数に入る値にあった画像を表示させたいのです。 文字や数値の場合、ダイナミックテキストを設置すれば、変数の値がそのまま表示されるところまではできるのですが、ダイナミックテキストではなく、画像を変更したいのです。 よろしくお願いいたします。

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

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

#1です。 第1段階の変数の取得部分ですが, >> ボタンが押されると >> 変数に入る値にあった画像を表示させたいのです。 と書かれていますよね。 このボタンは何処にあるボタンなのですか。また, >> 文字や数値の場合、ダイナミックテキストを設置すれば、 >> 変数の値がそのまま表示されるところまではできるのですが このダイナミックテキストは何処にあるのですか。 おそらく,両方ともメインムービーの直下,つまり _root にあるのではないでしょうか。 _root にある変数は _root の変数です。 一方,#1の補足で書かれている内容を見ると,ボタンはムービークリップの中にあるのですよね。 変数のパスがありません。 >> 小さなムービークリップというのが、 >> 正確に理解できなかったのかもしれませんが、 >> 新規シンボル作成でムービークリップにチェック。 >> 空のムービークリップシンボルを配置しました。 これも何処に置いたのですか。 #1の補足で書かれているのスクリプトを見る限り, ボタンと同じムービークリップ内にあるということになりますよ。 本当にそんな所で良いのでしょうか。 変数名 Atai1 Atai2 の2つのテキスト入力のテキストフィールドを _root 用意し, loadMC という "インスタンス名" のムービークリップをステージの左上の方に置き, ボタン入りのムービークリップを作り,そのボタンの中には, on (rollOver) { _root.loadMC.loadMovie(_root.Atai1+".jpg"); } on (rollOut) { _root.loadMC.loadMovie(_rootAtai2+".jpg"); } on (press) { _root.loadMC.loadMovie(_rootAtai1+".jpg"); gotoAndStop(2); } と書いてパブリッシュ。 SWFを開いて,変数名 Atai1 Atai2 の2つのテキスト入力のテキストフィールドに 3 と 2 という数字をそれぞれ入力し, ボタンにカーソルを持っていくと rollOver で「3.jpg」。 rollOut で「2.jpg」が表示されました。 スクリプトは,#1で補足されたものに具体的な変数名を入れて,パスも正確に書いただけです。 あと >> 新規シンボル作成でムービークリップにチェック。 >> 空のムービークリップシンボルを配置しました。 ムービークリップの中でも外でも良いですが,ちゃんとステージ上のどこかに配置してくださいよ。 何も見えませんが, ○ の小さなものは見えるはずです。 そのステージ上の ○ に loadMC なら loadMC 。他のものが良ければ他のもの。 何でも良いので 半角英数字 で何かのインスタンス名を付けてください。 ただし,半角数字から始まるインスタンス名はダメです。 あと,JPEGの種類は,プログレッシブJPEGは避けてください。表示されません。 それと,別に loadMovie にこだわる必要は全くありません。 #1では例で書いただけです。 各フレームに違う画像が入ったムービークリップを _root に置いて, 変数の値によって, gotoAndStop(); しても良いですよね。 方法は無数にあります。 何にしても,パス(階層)を間違わないことです。

honey_001
質問者

お礼

本当にありがとうございました。 おかげさまで、画像を表示させることができました。 2度も丁寧に教えいただき、FLASHの階層構造がやっと理解できました。 最終的にフォルダに画像ファイルが多く存在するのが、嫌だったので、画像をムービークリップでgotoAndStop();しました。 ありがとうございました。

その他の回答 (1)

noname#35109
noname#35109
回答No.1

画像をどう表示させたいのかがよくわかりませんが, ボタンを押すとダイナミックテキストに、変数の値が入るところまでできたら, あとは,とりあえず if文 で分岐させることを考えてください。 画像を表示する部分に loadMovie を使って,外部のJPEGを読み込む方法を使う場合について書きます。 画像 hana1.jpg hana2.jpg hana3.jpg がSWFやHTMLと同じフォルダにあったとします。 また,Flashのステージには小さな loadMC というインスタンス名のムービークリップを用意したとします。 ボタンでは,変数hensuu にランダムで1~3の値が入り, hensuu が 1 なら loadMC に hana1.jpg を読み込む hensuu が 2 なら loadMC に hana2.jpg を読み込む hensuu が 3 なら loadMC に hana3.jpg を読み込む これを,スクリプトにすると以下のようになります。 ------------------------------- on (release) { //変数hensuu に1~3の乱数を取得 hensuu = Math.floor(Math.random()*3)+1; //もし hensuu の値が1であれば if (hensuu == 1) { //loadMC に hana1.jpg を読み込む loadMC.loadMovie("hana1.jpg"); //もし hensuu の値が2であれば } else if (hensuu == 2) { //loadMC に hana2.jpg を読み込む loadMC.loadMovie("hana2.jpg"); //もし hensuu の値が3であれば } else if (hensuu == 3) { //loadMC に hana3.jpg を読み込む loadMC.loadMovie("hana3.jpg"); } } ------------------------------- 結局,変わる部分は hensuu の値の取得部分と, loadMC.loadMovie("hana1.jpg"); という部分で,具体的に画像をどう表示するかによって変わります。 数が多くなければ,全体的な構文は上のような感じで,たいていどんな場合も行けると思います。 if文による分岐は,たいていのことに対応できますが, 画像の枚数が多い場合は,すごく長くなってしまいます。 上のように,画像の名前が,hensuuに入る値と規則正しく対応している場合は,if文は必要ありません。 上のスクリプトは,以下のように単純に書くこともできます。 ------------------------------- on (release) { hensuu = Math.floor(Math.random()*3)+1; loadMC.loadMovie("hana"+hensuu+".jpg"); } ------------------------------- これだと,hana10000.jpg まであったとしても 4行で済みます。 またPCの思考もかなり減らすことができます。 とりあえず,if文による分岐を考えてみて, もしできそうだったら,短縮する方法を考えてみてください。 インスタンス名やファイル名に規則正しい数字をいれると,短縮できます。

honey_001
質問者

補足

お返事ありがとうございます。 当初は画像の変更方法さえ分かればできると、思っており、浅はかでした。また、親切にお教えいただき恐縮です。 記載いただいた内容の大体は理解したつもりで、試してみたのですが、画像は表示されませんでした。 具体的に申しますと、ボタンは複数あります。そのボタンにより値が違います。また、そのボタンは動いています。(ゲームみたいなものですね。) 1つボタンを押すと、その押されたボタン自体は消え、そのボタンの値により画像を表示したいのです。 また、ロールオーバーで画像表示、ロールアウトで画像を消すことと、違うボタンにロールオーバーされるまでは、その画像を表示し続ける。というものです。 そこで私がお返事いただいた内容にて考えたボタンに設置したスクリプトです。 ------------------------ on (rollOver) { loadMC.loadMovie("値1.jpg"); } on (rollOut) { loadMC.loadMovie("値2.jpg"); } on (press) { loadMC.loadMovie("値1.jpg"); gotoAndStop(2); } ------------------------ 各ボタンにより値が違うので、直接画像を読み込めると考えました。なので各ボタンにより値1は違います。値2は真っ白な画像を用意し背景と同化させてしまえばいいかなと考えました。 gotoAndStopについて ボタン自体を消すことから、ムービークリップにボタンが表示されているフレームを表示していないフレームを用意し、ボタンが押されたら、表示していないフレームで移動させるというものです。そのため、ボタンを表示している1フレームはフレームアクションでstop()しています。 loadMCについて 小さなムービークリップというのが、正確に理解できなかったのかもしれませんが、新規シンボル作成でムービークリップにチェック。 空のムービークリップシンボルを配置しました。 stop()が悪いのかloadMCの設置方法が悪かったかと色々試行錯誤はしてみたのですが、無理でした。 分かりにくいかも知れませんが、何かお分かりになるようでしたら、お返事いただきいです。 よろしくお願いいたします。

関連するQ&A