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

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

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

お世話になります。FLASH初心者です。 今、ステージ上にbtnA、btnBというボタンシンボルと、mvA、mvBというムービーシンボルを配置しています。mvAとmvBは一部重なり合っており、現在は、mvAのほうが上に重なっています。 ここで、btnBを押すと、mvBのほうを上に重ね、その後btnAを押すとmvAを上に重ねたいのですが、 どのようにしたら良いか詰まってしまいました。 actionScriptを使用して、対象インスタンスを指定する場合は、this.swapDepths( );等とできると理解しているのですが、クリックされたインスタンス以外をactionScriptから操作するにはどのようにしたら良いのでしょうか。 ご存知の方がいらっしゃいましたらご教授願います。

  • JB14
  • お礼率92% (36/39)

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

  • ベストアンサー
  • 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」と表示されている部分がインスタンス名と思い込んでハマってしまっておりましたが、実はそれはシンボル名だったという点に気付くのにすごく時間がかかってしまいました。上記図にはっきりと赤字で書いて下さっていたのに...反省) まるで書籍の解説を読んでいるかのようにわかりやすかったです。 理解が深まりました。お時間を割いて解説図を作成してくださったり、サンプルテストまでしていただき、感謝します。というかむしろ感動しております。 ありがとうございました。

関連するQ&A

  • Flash cs5 actionscript3.0

    アルファについての質問です ムービーシンボルで赤い丸を描き、それのアルファをactionscriptで30に指定したいです this.alpha=30; だと思っているんですがムービーシンボルの方にactionscriptを書いてもアルファは何の反応もなく100のままです 試しにシーンの方に書いてみるとアルファが0になってしまいステージに何も表れません 更に調べてみると this.alpha=56; にすると(つまり56以下にすると)アルファが0になり this.alpha=57; にすると(つまり57以上にすると)アルファが100になります ちょっとよくわからなくて困惑しています、何が原因なんでしょうか?

  • Flash 5:ライブラリからシンボルが消えた

    MacにてFlash 5 を使用しています。 作業中にライブラリからシンボル(複数)が消えてしまったのですが、 どうしてなのかおわかりの方、教えてください。 ライブラリ内にフォルダ(スーツケース様)をいくつか作ってあり、 その中の一つのフォルダが消えてしまったのです。 ステージ上にあるインスタンス(ライブラリから消えたシンボルの子)は、 何事もなかったように存在しています。 私が無意識に誤った操作をしてしまったのでしょうか。 消える直前の記憶としては、そのフォルダが別のフォルダ内に入ってしまっていたのを発見して、 「一旦、中身を出さなきゃ」と思いながら、 ライブラリのスクロールバーを「クイッ、クイッ」と上下してライブラリ内の全体を確認したことぐらいです。 そして、気がついたら、なくなってしまっていたのです。 どなたか、おわかりになる方、お教えください。 よろしくお願いいたします。

  • removeChildについて(AS3)

    ActionScript3のremoveChildについて、お教えください。 FlashCS5 windowsです。 どうぞ、よろしくお願いします。 順を追って、ご説明します。 ムービークリップ「テストA」「テストB」「テストC」の3つを作成します。 テストC→プロパティ→ActionScript用に書き出し→クラス で、TestCとクラス名を付けます。 ムービークリップ「テストA」のインスタンス名をtestA_mcとして、ステージに配置します。 testA_mc内のタイムラインに、 //---------- var testC_mc:TestC = new TestC(); addChild(testC_mc); //---------- と記述します。 ムービークリップ「テストB」を、ステージに配置します。 テストB内のタイムラインにremoveChildを書いて、 testA_mc内のtestC_mcをremoveChildしたいのですが、 どのように書けば、良いでしょうか、、、? ※不可能な場合は「不可能」と教えていただけますと、助かります。 よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • キー操作その2の質問です

    困っています お久しぶりです。そして前回のご返答ありがとうございます。 おかげさまで一つ解決策が見つかった気がします。 言葉が曖昧すぎてしまい回答を息詰らせてしまうような文章ですみませんでした。前回の回答は本当に適切で助かっています。 Flash製作はまだ未熟なもので、Actionscriptをいまいち理解していないところがあるので、文章が不適切になってしまいもうしわけありませんでした。 しかしながら、今回の件は貴重な第一歩となり、とても感謝しています。 たびたびKey操作の質問なのですが、先日の回答でSPACEキーを押すとcapture_mcが左から右へ出てくるようにはなったのですが、 今度は同じステージ上で、「モーショントゥイーンで別のムービークリップが下から上へ」出るようにしたいのです。 BlurFiltanさんが教えてくださった前回のActionscriptを別のムービークリップ(インスタンス名alpha_mc)に添付してイベントを「this._x」から「this._y」に変え、 インスタンス指定をalpha_mcにし、初期値をY座標の値に変えてパブリッシュプレビューをしてみたところ、 なぜかステージ上にある「capture_mc」の座標が、alpha_mcのscriptで指定した座標に変わってしまい、alpha_mcのムービークリップはSPACEキーを押しても動かないのですが、これは何が原因なのでしょうか?

    • ベストアンサー
    • Flash
  • FlashのActionScriptについて

    FlashのActionScriptについて Flash CS4(AS2.0)を使用 Flashに関しては初心者で、色々な参考書を見ている中で、 AkutionScriptの書き方に色々なパターンがあって分からなくなりました。 アクションを書き込む際、 (1)専用のActionScriptのフレームを作成してそこに書く (2)ボタンインスタンスに書く (3)対象のシンボルのフレームに書く 上記3つの方法はそれぞれどのような違いがあるのでしょうか?又、どのようにして 使い分けするのでしょうか?

  • Flash AS3.0 初歩的な質問

    現在AS3.0を勉強中です。 基本中の基本だと思いますがパスが上手く通っていないようなので ご教授願いたく。 1.ステージ上にテキストボックス(ダイナミックテキスト)を配置しインスタンス名を「hako」としています。 2.rootに以下のスクリプトを記述 ------------------------------------------------- addEventListener(Event.ENTER_FRAME,syori); function syori(eventObject:Event):void { hako.text=String(stage.mouseX); } ------------------------------------------------- ここまでは問題なく動作しています。 2をrootでは無く任意のムービークリップから処理させるべく・・・ 3.「abc」というインスタンス名のムービークリックを作成しステージに配置。この1フレーム目に以下のスクリプトを記述 ------------------------------------------------- addEventListener(Event.ENTER_FRAME,syori); function syori(eventObject:Event):void { parent.hako.text=String(stage.mouseX); } ------------------------------------------------- ※この際、2でrootに記述したスクリプトは消しています。 これで動くと思ったのですがエラーがでます。(ToT;) 「parent.hako.text」の部分を「root.hako.text」としてもエラーがでます。「_parent」も「_root」も駄目です。(「_」付はAS2.0までですよね?) 今回はダイナミックテキストは使った例ですが、 単純にムービークリップをステージに配置して、その座標を指定するような処理でも、 他のムービークリップから別のムービークリップを参照する方法が解りません(汗) どうすればよいでしょうか? AS2.0までは上記のような形でパスが通ったと思うのですが・・・

  • Flash5 シンボルの属性とクリップパラメータについて教えてください(T_T)

    超初心者で大変困っています。 まず、シンボルにアクションをつけようと思い、あるオブジェクトをシーンの ステージで作成し、その後ムービークリップタイプのシンボルに変更しました。(名前を"sbl"とします。) このsblにアクションをいきなりつけることができず、再度、sblをボタンタイプの シンボルに変換し、(sbl.2とします。)sblにやっとアクションをつけることが できました。sbl.2にはアクションはつけれません。 アクションをつけるにはシンボルを作るだけでは不可なのでしょうか。 また、sblのタイプはムービークリップなのにアクションはボタンタイプの ものしかつけれません。僕のイメージでは、sbl.2はsblの入れ子になっている と思うのですが、親シンボルは入れ子の属性に影響されるのですか? 併せて、クリップパラメータにでてくる"mascotName"ってなんですか? 質問が多くてすみません。Flash自体はじめてのため皆目検討がつかないことばかり で・・・・ ご存知の方教えてください<m(__)m>

  • AS3.0でギャラリーのボタンの透明度を変えたい

    環境:MacOSX Flash CS5 AS3.0 写真がステージに読み込まれた際にその写真に該当するボタンの透明度を 50%にしたいと思ったのですが、うまくいかなくて困っています。 btnArr[imageNum].alpha = 0.5; 上記のスクリプトでいけるとおもったのですが、うまくいきません。。 別の写真がステージに配置された時には透明度を戻したいのですが 分からず困っています。 どなたかどうかよろしくお願いします。 // 写真のURLを保存する配列 var photoArr:Array // var btnArr:Array // 写真を自動的に変更するタイマー var imageTimer:Timer; // 大きな画像を読み込むローダー var bigImageLoader:Loader; // 現在表示されている画像の番号 var imageNum:Number = 0; //-------------------------------- // 初期化の処理 //-------------------------------- // 配列を設定する photoArr = new Array(); photoArr[0] = "c00.jpg"; photoArr[1] = "c01.jpg"; photoArr[2] = "c02.jpg"; photoArr[3] = "c03.jpg"; photoArr[4] = "c04.jpg"; // btnArr = new Array(); btnArr[0] = btnA; btnArr[1] = btnB; btnArr[2] = btnC; btnArr[3] = btnD; btnArr[4] = btnE; // タイマーを起動 startTimer(); // 大きな画像を読み込む loadImage(); // タイマーをスタートする function startTimer() { imageTimer = new Timer(1000, 0); imageTimer.start(); imageTimer.addEventListener(TimerEvent.TIMER, onTimerCalled); } // タイマーが呼ばれるたびに実行される function onTimerCalled(evt) { btnA.y -= 85; btnB.y -= 85; btnC.y -= 85; btnD.y -= 85; btnE.y -= 85; if(btnA.y <= 0){ btnA.y = 380; } if(btnB.y <= 0){ btnB.y = 380; } if(btnC.y <= 0){ btnC.y = 380; } if(btnD.y <= 0){ btnD.y = 380; } if(btnE.y <= 0){ btnE.y = 380; } imageNum+=1; if (imageNum >= photoArr.length) { imageNum = 0; } // 大きな画像を読み込む loadImage(); } //btn01をクリックした時の処理 btn01.addEventListener(MouseEvent.CLICK,xClick01); function xClick01(evt:Event):void { btnA.y -= 85; btnB.y -= 85; btnC.y -= 85; btnD.y -= 85; btnE.y -= 85; if(btnA.y <= 0){ btnA.y = 380; } if(btnB.y <= 0){ btnB.y = 380; } if(btnC.y <= 0){ btnC.y = 380; } if(btnD.y <= 0){ btnD.y = 380; } if(btnE.y <= 0){ btnE.y = 380; } imageNum+=1; if (imageNum >= photoArr.length) { imageNum = 0; } // 大きな画像を読み込む loadImage(); } //btn02をクリックした時の処理 btn02.addEventListener(MouseEvent.CLICK,xClick02); function xClick02(evt:Event):void { btnA.y += 85; btnB.y += 85; btnC.y += 85; btnD.y += 85; btnE.y += 85; if(btnA.y >= 381){ btnA.y = 40; } if(btnB.y >= 381){ btnB.y = 40; } if(btnC.y >= 381){ btnC.y = 40; } if(btnD.y >= 381){ btnD.y = 40; } if(btnE.y >= 381){ btnE.y = 40; } imageNum-=1; if (imageNum <= -1) { //photoArr.lengthを-1に変更 imageNum = 4; } // 大きな画像を読み込む loadImage(); } // 大きな画像を読み込む function loadImage() { // 新しい画像を読み込む var url = "gallery_img/"+photoArr[imageNum]; btnArr[imageNum].alpha = 0.5;//読み込まれた画像に該当するボタンの透明度を50%にする処理 var req = new URLRequest(url); bigImageLoader = new Loader(); bigImageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoad); bigImageLoader.load(req); mainTarget.addChild(bigImageLoader); } // 大きな画像が読み込まれたら実行される処理 function onImageLoad(eventObj) { bigImageLoader.alpha = 0; stage.addEventListener(Event.ENTER_FRAME, onFadeIn); } // フェードインをつける function onFadeIn(eventObj) { bigImageLoader.alpha += 0.1; } // フェードインの処理を取り除く if (bigImageLoader.alpha >= 1) { removeEventListener(Event.ENTER_FRAME, onFadeIn); }

  • Flashでのアルファ値の操作

    こんばんは。 実はflashのaction scriptでのシンボルのアルファ値の変更でどうしても解決できないトラブルがあり、ご質問させて頂きました。 今ムービーの一部で以下のような流れのaction scriptがあります。 ・ムービークリップの1フレーム目  まずフレームアクションでstopしておき、画像をシンボル化したもののアルファ値をonClipEventのenterFrameで+していくフェードイン処理。 アルファが100以上になったらplayする。 ・ 〃 2フレーム目  ムービークリップのアルファ値は扱わずにgetTimer()を使った待機処理 ・ 〃 3フレーム目  1フレームの逆のフェードアウト処理 この動作をaction scriptで行わせた場合に、 アルファ値が100になった瞬間シンボルが1ピクセルか2ピクセル位「縮む」という症状が 現れてしまいました。 つまりフェードインが終わった瞬間画像の横幅が1,2ピクセル程度縮み、待機が終わり再びフェードアウトに入る瞬間縮んだ1、2ピクセルが戻り(広がり)、フェードアウトが始まるという症状です。 もちろん2フレーム目のシンボルのwidthが小さい 等ではなく、actionscriptでこの処理を行った場合のみにこの症状が現れてしまいます。 今までは無理やりモーショントゥイーンで作っていましたがどうしてもこのトラブルを解決したく、ご質問させて頂きました。ご教授よろしくお願い致します。

    • ベストアンサー
    • CSS
  • Flash リンケージ

    ステージ上に空のムービークリップを配置して、そこにjpg画像を読み込む実験をしています。 loadMovieを使えば、外部のjpg画像を読み込めるのですが、 今やりたいのはflash内に画像を読み込んで、ライブラリ内にあるビットマップ画像(jpg)に対して、識別子を付けてスクリプト処理で表示させるというものです。 1.ステージに空のムービークリップ「mc」(←インスタンス名)を配置しています。 2.ライブラリ内のビットマップ画像には「p1」という識別子を付けています。 「p1」の識別子を使った表示方法が解らなかったので、とりあえず今はビットマップ画像を一旦新しいムービークリップで包んでそのムービークリップの識別子を「c1」として、 ルート上に mc.attachMovie("c1,"mc2",1); というように書いて、表示させています。 が、これではやりたい事と違います。 ライブラリ内のビットマップ画像に付けた識別子「p1」を利用して、 その該当するjpg画像をステージ上に配置(表示)させるにはどうすればよいでしょうか? FlashのバージョンはMXもしくは8 ASは1.0もしくは2.0です。

専門家に質問してみよう