• ベストアンサー

ボタンによるシンボルの表示・非表示 (FlashMX2004)

シーン上にボタンシンボルとムービーシンボルが2つずつあります。 ボタン1or2を押すたびに、ムービーシンボル1or2を 表示したり、非表示にしたりしたいのですが、 それぞれにどのようなアクションスクリプトを書けばよいのでしょうか? ボタンで表示する際に、ムービーシンボルが重ね順で上側にくるようにしたいです。

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

  • ベストアンサー
  • DPE
  • ベストアンサー率85% (666/776)
回答No.3

表示/非表示を切り替えるには、ムービークリップを表示するかどうかを決める _visible プロパティが便利です。 _alpha プロパティは透明度(アルファ値)の設定で、0にすると完全に透明になり、やはり非表示になります。しかし、onPress やonRollOver イベントなどを利用するムービークリップで _alpha を0にした場合は、ムービークリップは表示されないのですが、カーソルが乗ると手のカーソルに変わってしまいますし、ムービークリップをクリックすることも可能です。 一方、_visible を false にしたムービークリップでは、クリックやマウスオーバー等のイベントが検出されなくなります。_visible = false と _alpha = 0 は、同じ非表示でも、ここに違いがあります。 例えば、ムービークリップ clip1 と clip2 、それぞれの表示/非表示を切り替えるボタン button1 と button2 というインスタンスがあるとします。 これら全てがステージ上にある場合でも、ステージ上にあるムービークリップの中に入れ子になっている場合でも、スクリプトの考え方は同じです。ムービークリップとボタンが違う階層にある場合は、_visible を操作するインスタンス名に階層を付けて指定して下さい。 button1 が押された時、clip1 の _visible が true 、つまり表示されていた場合は clip1 の _visible を false (非表示)に、逆に _visible が false だった場合は true に書き換えます。 このように考えると、スクリプトは次のようになります。このスクリプトは button1 に設定します。 ここでは button1 に設定するスクリプトだけを紹介しますが、button2 にも同じ要領で、clip2 の _visible を操作するようにスクリプトを設定して下さい。 (↓このスクリプトをコピーして使う場合は、各行頭の全角のスペースを、全て半角のスペースかタブに置き換えて下さい。このまま使うとシンタックスエラーになります)  on( press )  {   // clip1 が表示されている場合は非表示に   if( clip1._visible )   {    clip1._visible = false;   }   //非表示だった場合は表示する   else   {    clip1._visible = true;   }  } ちなみに、ビット演算を使って次のようにスッキリ書くこともできます。  on( press )  {   //ボタンが押される度にtrue/falseを切り替える   clip1._visible ^= 1;  } 重ね順に関しては、レイヤーを分けて、上にしたいムービークリップを上のレイヤーに配置すると、そのムービークリップの方が上になります。同様に、ボタンとムービークリップのレイヤーを分け、ムービークリップをボタンよりも上のレイヤーに配置しておけば、ムービークリップの方が必ず上になります。 clip1 と clip2 が重なっていて、後から表示する方のムービークリップを必ず上にしたい、といった処理がご希望ですと、もう少し工夫が必要です。 この処理は少々ややこしいですが、ムービークリップの深度(重なり順:小さいほど下になる)を取得する MovieClip.getDepth と、指定のムービークリップと深度を入れ換える MovieClip.swapDepths アクションを利用して、実現できるかと思います。

apache6
質問者

お礼

詳しい解説、ありがとうございます。 visibleでon/offを切り替えることができました。 ありがとうございます。

その他の回答 (2)

  • rightegg
  • ベストアンサー率41% (1357/3236)
回答No.2

こんばんは。 失礼かとは思いますが、 「正常に動作しない」ことはないはずです。 きちんと整理し、誤動作を防ぐようにすれば、 例え命令が重複するボタンでも動作します。 例えばボタン1でMC1の表示非表示を制御しようと思えば、if文で、MC1のアルファの状況を判定し、 100なら0へ、0なら100へ変化するように書けばどうでしょう? MC1自身に表示非表示を左右するボタンがあっても、これなら動作します。 フレーム移動でも、指定するのではなく、playだけにすれば動作するはずです。 それともこれで動作しない理由が他にあるのでしょうか? 良ければもっと詳細に状況を補足して下さい。

  • rightegg
  • ベストアンサー率41% (1357/3236)
回答No.1

こんにちは。 理屈的に簡単なのは、MC側を表示するフレームと非表示のフレームで作成し、ボタンでフレームを前後に移動させる事。 これはMCに名前を付ければ簡単に出来ます。 あるいはアルファ(_alpha)を変化させても出来ます。重ね順で対応するのはややこしいので止めておいた方が良いかと思います。

apache6
質問者

補足

ご回答ありがとうございます。 ムービーシンボルのなかに、自分自身の ムービーシンボルを非表示にするボタンがありますので、 このやり方では、正常に動作しません。

関連するQ&A

専門家に質問してみよう