• 締切済み

FLASHのボタン表示について

FLASHのロールオーバ時の各ボタン表示について質問があります。 今FLASHでメニュを作成していまして、下記ボタンを作成しました。 1.ボタンA 2.ボタンB 通常時の背景は1枚の写真です。 ここで、1.ボタンAを押すと(ロールオーバー時)背景を 写真A(背景を隠した全体表示)にして、 同じく2.ボタンBを押すと背景を写真Bにするボタンを作成しました。 各ロールオーバー時に背景は希望の写真背景に変わります。 しかし各ボタン表示が 1.ボタンAをを押すと2.ボタンBは表示 2.ボタンBを押すと1.ボタンAをが消える これは、ボタンのレイヤーでのどちらが前面かで変わることが分かりました。 ここで希望としては、1を押しても(ロールオーバ時)2のボタンが表示され、 2を押しても(ロールオーバ時)1のボタンが表示されるようにしたいのですが、 この場合どうすれば宜しいのですか? ボタンの表示優先(レイヤー前面か後面)がある限り無理なのでしょうか? ボタンのロールオーバ時のボタン表示について分かる方、教えてほしいのですが、お願いします。

みんなの回答

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

一番肝腎な 『バージョン』 についての記載が全くされていませんが...。 バージョンによってスクリプトや作るべきムービーの構造が変わりますから, 質問する/しない に関わらすバージョンには注意してください。 (本やネットの情報もバージョンによって全然違っていることも多々あります。) ====== ご質問を簡単に書けば,  「ボタンA」のロールオーバー    →「ボタンA」を非表示 & 「ボタンB」を表示  「ボタンB」のロールオーバー    →「ボタンB」を非表示 & 「ボタンA」を表示 のようなことをするということですよね。 大まかに書けば, Flash MX 以上をお持ちで, Flash Player 6 以上用の SWF をパブリッシュする という条件でしたら お互いのボタンの「_visible(またはvisible)」プロパティの 「true/false」 を切り替えれば良いのではないかと思います。 Flash MX 以上 とは Flash MX,Flash MX 2004系,Flash 8系,Flash CS3,Flash CS4 のことです。 もちろん方法はこれ以外にも無数にありますが, 「簡単 & オーソドックス」 なのが, この「_visible(またはvisible)」プロパティを変える方法だと思います。 以下では, 「ボタン」のついでに「背景の写真」も同時に 表示/非表示 させる方法を書きます。 (「背景の写真」に関しては不要であればその部分だけ消してもらえば良いと思います。) 「背景の写真A」 を選択し, 「修正(または挿入)」→「シンボルに変換」でムービークリップに変換します。 その「背景の写真A入りムービークリップ」を選択して, 「プロパティ」インスペクタ より 「インスタンス名」 を付けます。 例えば 「mc_A」というインスタンス名を付けることにしておきます。 (「プロパティ」インスペクタ の場所はバージョンによって違うのでどこにあるとは言えません。) 「背景の写真B」 も同様に, 「修正(または挿入)」→「シンボルに変換」でムービークリップに変換します。 その「背景の写真B入りムービークリップ」を選択して, 「プロパティ」インスペクタ より 「インスタンス名」 を付けます。 例えば 「mc_B」 というインスタンス名を付けることにしておきます。 「ボタンA」も同様, 「プロパティ」インスペクタ より 「インスタンス名」 を付けます。 例えば 「btn_A」 というインスタンス名を付けることにしておきます。 「ボタンB」についても同様で, 「プロパティ」インスペクタ より 「インスタンス名」 を付けます。 例えば 「btn_B」 というインスタンス名を付けることにしておきます。 ここまでの状態を図示したのが 【下の図】↓ です。 「btn_A」「btn_B」「mc_A」「mc_B」のレイヤーはどこでもかまいません。 何でしたら4つとも同じレイヤーでもかまいません。 ムービークリップ「mc_A」「mc_B」 よりも ボタン「btn_A」「btn_B」 の方が上に表示されていれば問題ないと思います。 それらのムービークリップやボタンとは違うレイヤーを挿入して, その新レイヤーのムービークリップやボタンが存在するキーフレームを選択して, アクションパネルに次のようなスクリプトを書けば 一応私の言っている物のサンプルができます。 Flash MX 以上をご使用で, Flash Player 6 以上用の SWF をパブリッシュする場合で, ActionScript 1.0 を使用する場合のスクリプト。 (ActionScript 2.0 設定でパブリッシュしてもOK。) ------------------------------------- // 初期状態で「btn_A」と「mc_B」を非表示にする // (これは付けてみたただけで あってもなくても良い) btn_A._visible = false; mc_B._visible = false; // 「btn_A」ロールオーバー時のイベントハンドラメソッドを定義 btn_A.onRollOver = function() { // 「btn_A」を非表示にし「btn_B」を表示する btn_A._visible = false; btn_B._visible = true; // 「mc_A」を表示し「mc_B」を非表示にする mc_A._visible = true; mc_B._visible = false; }; // 「btn_B」ロールオーバー時のイベントハンドラメソッドを定義 btn_B.onRollOver = function() { // 「btn_A」を表示し「btn_B」を非表示にする btn_A._visible = true; btn_B._visible = false; // 「mc_A」を非表示にし「mc_B」を表示する mc_A._visible = false; mc_B._visible = true; }; ------------------------------------- Flash CS3 以上をご使用で, Flash Player 9 以上用の SWF をパブリッシュする場合で, ActionScript 3.0 を使用する場合のスクリプト。 ------------------------------------- // 初期状態で「btn_A」と「mc_B」を非表示にする // (これは付けてみたただけで あってもなくても良い) btn_A.visible = false; mc_B.visible = false; // 「btn_A」にイベントリスナーを登録 // (ロールオーバー時に実行,実行関数「overBtnA」) btn_A.addEventListener(MouseEvent.ROLL_OVER,overBtnA); // 関数「overBtnA」の定義 (引数:マウスイベント):戻り値なし function overBtnA(evt:MouseEvent):void{ // 「btn_A」を非表示にし「btn_B」を表示する btn_A.visible = false; btn_B.visible = true; // 「mc_A」を表示し「mc_B」を非表示にする mc_A.visible = true; mc_B.visible = false; } // 「btn_B」にイベントリスナーを登録 // (ロールオーバー時に実行,実行関数「overBtnB」) btn_B.addEventListener(MouseEvent.ROLL_OVER,overBtnB); // 関数「overBtnB」の定義 (引数:マウスイベント):戻り値なし function overBtnB(evt:MouseEvent):void{ // 「btn_A」を表示し「btn_B」を非表示にする btn_A.visible = true; btn_B.visible = false; // 「mc_A」を非表示にし「mc_B」を表示する mc_A.visible = false; mc_B.visible = true; } ------------------------------------- Flash MX 以上 & Flash Player6 以上でもその他の書き方はあります。 しかし 特定できない架空の場合(バージョン)について詳細に書いているとキリがないので省略します。 ====== Flash 5 しかお持ちでない場合, または Flash MX 以上をお持ちでも Flash Player 5 以下用の SWF をパブリッシュする必要がある場合, ボタンにはインスタンス名を付けることができません。 したがってボタンに対しての _visible プロパティは設定できません。 ボタンインスタンスにはそもそもそんなプロパティが存在しないということです。 ただし, ムービークリップには インスタンス名 も付けられますし _visible プロパティも存在しますから, ボタンをムービークリップの中に作成してこの方法を使うか, または,全く別の方法を考える必要があります。 「『Flash Player 5 以下用の SWF をパブリッシュする必要』など常識で考えてあるわけない。」 と思われるかもしれませんが, Flash Lite 1.0 または 1.1 (ベース:Flash Player 4)用の SWF がこれに当たります。 携帯用 Flash は Flash Lite 1.1 ターゲットで作成される方が多い(ほとんど主流)です。 Flash 4 (CS4 ではなく ただの 4)以下しかお持ちでない場合, これは常識で考えてまずあるはずのない質問ですから,当然省略します。 (個人的には Flash 4 まででしたら回答できます。それ未満は難しいです。) Flash はバージョンアップとともに,スクリプトや仕様を大きく変える「時代とともに生きているソフト」です。 どこかの死んだようなソフトとは違います。 また,様々な方が様々なバージョンで様々な目的に応じた Flash を作成されています。 とにかく バージョン が大切です。 =*=・=*=・=*=・=*=・=*= > ボタンの表示優先(レイヤー前面か後面)がある限り無理なのでしょうか? どうされているのかがつかめないので,意味がよくわかりませんが, visible を使わずに,gotoAndStop() でもできますよ。  上レイヤー 筆・・|○|●|  下レイヤー 筆・・|●|○| gotoAndStop(1) でフレーム1を表示させれば, 下レイヤーの●が表示されます。 gotoAndStop(2) でフレーム2を表示させれば, 上レイヤーの●が表示されます。 メインのタイムラインではなく, ムービークリップ内のタイムラインを使えばもっと複雑なこともできます。 ムービークリップA~E があったとして, 各A~E のフレーム1にはボタンを置いて 各A~E のフレーム2は何も置かず空にしておきます。  レイヤー 筆・・|●|○|  ←各ムービークリップ内 ムービークリップA内のフレームだけを フレーム1 で停止させ, ムービークリップB~C内のフレームを フレーム2 で停止させると, ムービークリップA内のボタンだけが表示されます。 例えばムービークリップB,C,D内のフレームを フレーム1 で停止させ, ムービークリップA,E内のフレームを フレーム2 で停止させると, ムービークリップA,E内のボタンだけが表示されます。 「A,Bだけを表示」 「C,D,Eだけを表示」… などどんな表示も可能です。 こういうものを作っても良いと思います。 しかしこういうのは説明が面倒ですし作るのも面倒でしょうから, (これもバージョンによって具体的方法は変わる) visible を使う簡単な方法をメインに書きました。  

jyun0807
質問者

補足

BlurFiltan様 丁寧な回答ありがとうございました。 すいません、バージョンを書かなかった為お手数おかけして。 バージョンはFLASH 8です。 パブリッシュ設定は バージョンFLASH PLAYER 8 アクションスクリプトは2.0です。 回答の btn_A.visible = false; mc_B.visible = false; などはアクションスクリプトに書き込めば良いのでしょうか? ※ロールオーバーを以降ROにさせていただきます。 あと回答の  「ボタンA」のロールオーバー    →「ボタンA」を非表示 & 「ボタンB」を表示  「ボタンB」のロールオーバー    →「ボタンB」を非表示 & 「ボタンA」を表示 ではなく  「ボタンA」のロールオーバー    →「ボタンA」も「ボタンB」を表示 ボタンAはROの色  「ボタンB」のロールオーバー    →「ボタンB」も「ボタンA」を表示 ボタンBはROの色 になります。 方法は レイヤー3 ボタンA レイヤー2 ボタンB レイヤー1 背景 現状では、ボタンBの時は希望通りになるのですが、ボタンAの時 ボタンBが消えます。この時にボタンBを表示させたいだけです。 これは、ボタンのレイヤーが問題である事が分かりました。 試しにボタンAのレイヤーを下にするとボタンAはOKです。 ボタンBはNGです。当然ボタンのモーショントゥーイン時に背景で 全部覆ってしまってるので、当然ですね。 ちなみに、各ボタンのロールオーバにモーショントゥーインを 作成していて、そこに下記 レイヤー2 ボタンAまたはB レイヤー1 背景AまたはB にしています。 この方法で行っているのですが、簡単に出来るような気がして しかし、この方法だとボタンAを選択した時、当然下のBを隠してし まいますよね。 今日ずーとやってたのですが、ボタンAのオーバのトゥーインで 新しくレイヤーを作りそこにボタンB(シンボル)を入れてみました。 そうすると何とか出来ます。 しかし、位置あわせが難しく出来れば他の方法で行いたいと考えています。 質問が分かり難いと思いますが、どうぞ宜しくお願いいたします。

関連するQ&A

専門家に質問してみよう