• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:flash AS2.0 他のシンボルを操作する方法)

Flash AS2.0の他のシンボルを操作する方法

このQ&Aのポイント
  • Flash初心者によるmvAとmvBの重なり順操作についての質問。
  • btnBを押すとmvBを上に重ね、btnAを押すとmvAを上に重ねたい。
  • クリックされたインスタンス以外をactionScriptから操作する方法を知りたい。

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

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

まず前置きとして題名から > flash AS2.0 他のシンボルを操作する方法 ということですが, 「シンボル」と「インスタンス」の区別があやふやなように思えます。 ActionScriptで深度などを変化させるとき 「同じシンボルであるかないか」はどうでも良い(そんなこと関係ない)ことです。 ステージ上に乗った複数のものの親元シンボルが 同じシンボルであっても違うシンボルであってもそんなことはどうでも良い。 「ステージ上に乗った者」=「インスタンス」 が重要なのです。 Flash ActionScript Helper「シンボルとインスタンス」 http://homepage3.nifty.com/ginga-b/MX/symblinst.html Flashの枝「シンボルとインスタンス」 http://1art.jp/flash/le/lesson1/lesson1.htm ================================ というわけで, ご質問からはハッキリとは読みとれませんが, 「btnA」「btnB」「mvA」「mvB」という名前は シンボル名ではなくインスタンス名であると解釈します(勝手に決めます)。 つまり例えば「mvA」であれば, 下の【図】↓のようにして命名した <インスタンス名> であるものとします。 その場合, それらが存在するタイムラインのフレームに書く1つめのスクリプト例です。 //-------------------------------------------- //「btnA」クリック時の動作を定義 btnA.onRelease = function() { //「mvA」をこのタイムラインの最高深度に移動 mvA.swapDepths(getNextHighestDepth()); }; //「btnB」クリック時の動作を定義 btnB.onRelease = function() { //「mvB」をこのタイムラインの最高深度に移動 mvB.swapDepths(getNextHighestDepth()); }; //-------------------------------------------- ※↑ActionScript 1.0 (2.0)   要:Flash MX 2004 以上(MX 2004 ,Flash 8,Flash CS3,CS4…)   要:Flash Player 7 以上用 SWF パブリッシュ 上のスクリプトでは ターゲットパス抜きの getNextHighestDepth() によって このスクリプトを書いた階層の最高深度を求めて その深度に「mvA」「mvB」を移動させるという考え方で作っています。 簡単ですが,無条件に最高深度に持っていくスクリプトなので, 「mvA」「mvB」以外のインスタンスが上にあったとき そのインスタンスよりもさらに上に移動してしまいます。 それで良ければ(それでも良いことが多いと思う)上のままで良いと思います。 「もっと厳密に「mvA」と「mvB」だけを操作したい」という場合は 次のようにするのも1つの方法です。 //-------------------------------------------- //「btnA」クリック時の動作を定義 btnA.onRelease = function() { //「mvA」と「mvB」の深度を比べた大きい方の深度を得る var higherDepth = Math.max(mvA.getDepth(), mvB.getDepth()); //「mvA」をその大きい方の深度に移動 mvA.swapDepths(higherDepth); }; //「btnB」クリック時の動作を定義 btnB.onRelease = function() { //「mvA」と「mvB」の深度を比べた大きい方の深度を得る var higherDepth = Math.max(mvA.getDepth(), mvB.getDepth()); //「mvB」をその大きい方の深度に移動 mvB.swapDepths(higherDepth); }; //-------------------------------------------- ※↑ActionScript 1.0 (2.0)   要:Flash MX 以上   要:Flash Player 6 以上用 SWF パブリッシュ ※ 下の図は Flash 8 でのスクリーンショット画面です↓。  (バージョンによっては見かけは大きく異なります。)

JB14
質問者

お礼

大変わかりやすい回答をいただきありがとうございました。 ご指摘の通り、シンボルとインスタンスの理解が曖昧でしたが、その点の理解のなさのため、アドバイスいただいた後もうまくいくまでにかなり苦闘してしまいましたが、本日無事解決しました。(「インスタンス:mvA」と表示されている部分がインスタンス名と思い込んでハマってしまっておりましたが、実はそれはシンボル名だったという点に気付くのにすごく時間がかかってしまいました。上記図にはっきりと赤字で書いて下さっていたのに...反省) まるで書籍の解説を読んでいるかのようにわかりやすかったです。 理解が深まりました。お時間を割いて解説図を作成してくださったり、サンプルテストまでしていただき、感謝します。というかむしろ感動しております。 ありがとうございました。