• ベストアンサー

AS2でレイヤーが優先されてswapDepthsがうまく作動してくれな

AS2でレイヤーが優先されてswapDepthsがうまく作動してくれない。 AS2で_mcの中にポップアップするballoon_mcを入れており そのような構造の_mcを_rootに複数並べています。 ロールオーバー時に_root.getNextHighestDepth()にswapDepthsさせようとしてます。 しかしながらballoon_mcは他の_mcの後ろに行ってしまいます。 _mc自体の重ね合わせを固定すると消えてしまいます。 深度はコンフリクトはしてないはずなのですが 何故か消えてしまいます。 使っているソフトはCS5です。 分かる方いらっしゃいますか?

  • Flash
  • 回答数1
  • ありがとう数2

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

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

そもそも「深度」というものは 「タイムラインごと」( =階層ごと=MC(ムービークリップ)ごと )にあるもので, なおかつ swapDepths で動かせる深度は その動かすMCが存在する「タイムライン内」(=階層内=MC内)だけです。 また _root.getNextHighestDepth() ↑で得られる値は「数値」です。 「どこそこの深度○」という「住所番地のようなもの」ではなく 「単なる数値(0,1,2,3…)」 が得られるだけです。 > _mcの中にポップアップするballoon_mcを入れており > そのような構造の_mcを_rootに複数並べています。 この部分を階層図に表すと次のようになりますよね。  _root(メインのタイムライン(階層))    └_mc      └balloon_mc balloon_mc をいくら高い数値に swapDepths しようとも _mc 内での表示順序が上の方になるだけですから _mc より上にあるものを飛びこすことはできません。  ※swapDepths で balloon_mc を    AAA より上には移動できない↓   _root(メインのタイムライン(階層))     ├AAA(上レイヤー)     └_mc(下レイヤー)       └balloon_mc balloon_mc を _root の最高深度に配置したいのでしたら balloon_mc を 最初から _root に配置しておくか, または ライブラリ から MCシンボル を attachMovie するなど 別の方法をとるべきです。 ~ ライブラリ から MC を attachMovie する方法例~ ライブラリ にある balloon_mc のシンボルMCを選択し プロパティ の リンケージ より  □ ActionScriptに書き出し  □ 1フレーム目に書き出し にチェックを入れ  識別子:[     ] の欄でたとえば「Balloon」という識別子を与えます。 その Balloon を _root の最高深度に配置するスクリプトは 次のようになります。 ------------------------ //_root の最高深度に //ライブラリの識別子「Balloon」のMCを //「balloon_mc」というインスタンス名で呼びだす _root.attachMovie("Balloon","balloon_mc",_root.getNextHighestDepth()); //適当に座標を指定 _root.balloon_mc._x = Stage.width / 2; _root.balloon_mc._y = Stage.height / 2; ------------------------ なお, どうしても  「_mc の中の balloon_mc が   _root の最高深度に出る」 というような演出を見せたい場合は そのように見えるように  「_mc の中の balloon_mc の  _visible を false にすると同時に  Balloon をattachMovie する」  (↑本物は消して替え玉にすり替える) などというような『手品』を考える必要があると思います。 画像:識別子を付ける場面↓

fun_wizard
質問者

お礼

なーーーるほど このような仕様だったのですね! むしろこっちの方が便利だし利にかなってますよね。 あと最後の入れ替え技も挑戦してみます。 ありがとうございます。

関連するQ&A

  • 【FLASH】swapDepthsでMCが増殖する??

    FLASH8(Win-XP)使用者です。 MCを最前面にもってくるために myDepth = _root.getNextHighestDepth() _root.myMC.swapDepths(myDepth); を使っていますが、不審な動作が多いため検証実験をしています。 不審点はフレーム逆行時のみMCが複製されているという点です。 以下が私の実験です。 ■実験■ 2フレームを用意し、タイムラインに以下を書き込みます。 <1フレーム目> this.stop(); myDepth = _root.getNextHighestDepth() _root.box.swapDepths(myDepth); _root.button.onRelease = function(){ _root.nextFrame(); } <2フレーム目> this.stop(); myDepth = _root.getNextHighestDepth() _root.box.swapDepths(myDepth); _root.button.onRelease = function(){ _root.prevFrame(); } ※ _root.box は解りやすくするため半透明なMCにします。 ここで2フレーム→1フレームに戻るときのみ box の色が濃くなっていくのがわかると思います。 どんどん複製されているためだと思います。 なぜ複製されてしまうのでしょうか? また回避策はあるのでしょうか? お詳しい方、よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • MC内から_rootへのgotoAndPlay

    初めての投稿です。 宜しくお願い致しますm(__)m FlashCS3、AS2.0を利用です。 _rootで15個位のレイヤーに分け格レイヤーにMCを置き、その中でオブジェクトの制御を行うにホームページのトップ画面を作りました。 ASを1フレーム目に記述するとバグが発生する可能性があると聞いたので、 _rootのみASは2フレーム目に記述したので、ホームページのトップとしては_rootの2フレームしか使っていません。 _rootに swfの読み込み。 stop(); var loader = new MovieClipLoader (); loader.loadClip("Window_scroll.swf", _root.Window_Pic_MC); レイヤーの1つにmp3を読み込み、再生停止の制御を行うMC。 があります。 _rootにMC(1)があり、その中のMC(2)をボタンとして利用していて、 on (rollOver) { this._parent.swapDepths(95); this._parent.gotoAndPlay("n1"); } on (rollOut, releaseOutside) { this._parent.swapDepths(-1); this._parent.gotoAndPlay("n2"); } on (release) { _root.gotoAndPlay("m"); } とMC(2)に直接打ち込んでいます。 "m"が_rootの3フレームから10フレームまでで、 on (release)されるとMC(2)自体が小さくなるように モーショントゥーンで作っています。 そこで質問なのですが、 読み込んだswfの上に別レイヤーでWindowの枠があり、 MC(2)がon (release)時にswfの映像が消えて、 枠が大きくなる様にしたいのですが動いてくれません。 しかも swfも消えなく、小さくなったMC(1)を再度クリックすると 音が再度読み込まれ2重になって流れます。。。 この時微妙に枠が大きくなったり、アルファをかけてあるMC等の色が 濃くなったりするので、全てが2重になっているのかもしれません。 これはバグなのか。。。 長々とスミマセン!! 質問が多くなってしまったので、 _rootのMC(1)の中にあるMC(2)をon (release)した時、_rootにある枠が 大きくなる方法を教えて下さい。 宜しくお願い致します。

    • ベストアンサー
    • Flash
  • レイヤーに配置されたムービークリップを削除したい

    Flash8を使っています。 シーン1とシーン2があり、それぞれのレイヤー上にMCが10個程並んでいます。シーンの切り替えはボタンで行います。 シーン1と2で必要なMCを画面上側にある選択領域(choice_MC)にドラッグするのですが、ドラッグ開始と同時にswapDepthsで深度空間に移動させ、シーンが変わっても消えないようになっています。 しかし、2つ問題点があり ● シーンを切り替えると、choice_MC上のMCと同じものが表示されてしまう。 ● choice_MC上になくてもドラッグしたMCはシーンを切り替えても表示されてしまう。 解決策として シーンを切り替えた際、choice_MC上のMCと同じ名前のMCは深度空間に移動させて消去する。 というようなことを考えていましたが、何か良い方法はないでしょうか? 何卒宜しくお願い致します。 

    • ベストアンサー
    • Flash
  • AS3:ルートの変数とムービークリップ内の変数について

    AS3:ルートの変数とムービークリップ内の変数について ルートのタイムラインで設定した変数var RootVarがあるとして、これをあるムービークリップMCからMovieClip(root).RootVarで読み取って、MC内で何か処理をしたときMovieClip(root).RootVar++;とやってもルートのRootVarの値は変わりません。 例えば、 ■ルートのタイムライン1フレームに記述 var RootVar:uint; if(RootVar>=3){ trace("できた!!"); } ■ステージにあるムービークリップMCのタイムライン1フレームに記述 MovieClip(root).RootVar=0; var AddTimer:Timer = new Timer(1000,3); AddTimer.addEventListener(TimerEvent.TIMER,AddNum); AddTimer.start(); function AddNum(eventObject:TimerEvent):void { MovieClip(root).RootVar++; } ルートからムービークリップ、ムービークリップからルートへ変数に値を渡したり受け取ったりはできなのでしょうか? 変数の扱い方が問題なのでしょうか?よろしくお願いします。 環境:AS3、Flash CS4

    • ベストアンサー
    • Flash
  • ASで降らせた雪のマスクの掛け方について。

    下記のサイトのASを使用させていただき、雪の降るFlashを作成したのですが、 参照サイト : http://www.webdesignlibrary.jp/2006/06/flash_snow.php このスクリプトで降らせた雪を、例えば星型の図形をマスクにして、 その範囲内で雪が降るようにしたいと思い、 色々と丸一日掛けて調べたのですが、全く上手く行きません。 とりあえず、色々と調べてみた結果、 【 xxx.setMask 】 を使えば良いのだろうか・・?、、、と言う所までは 行き着いたのですが、スクリプトを、どう改造?してみても、全く思う結果が得られません。 【 _root.setMask 】 で、ステージ全体を、目的の図形MCでマスクする事で、 思う結果に近しいカタチは出来たのですが、_root.setMask でステージをマスクしてしまうと、 例えば、マスク外に何か画像処理を施したくても、マスク外の画像は全て消えてしまいますし、 その画像の大きさ込みでマスクを作成すると、その画像の上にも雪が降ってしまうので、 完全に行き詰ってしまっています。 ASで降らせた雪だけをマスクする方法はありますでしょうか? どなたか、ご存知の方がいらっしゃいましたらば、 是非にご教示願えますと、大変ありがたいです。  何卒よろしくお願い申し上げますm(_ _)m 以下、使用AS ------------------------------------------------ width = 550; height = 400; total = 200; for (var t = 0; t != total; t++) { var mc = _root.attachMovie("snowflake", "snowflake"+t, _root.getNextHighestDepth()); mc._x = (Math.random()*(width+20))-10; mc._y = (Math.random()*(height+20))-10; mc.yspeed = (Math.random()*1.75)+0.25; mc.speed = (Math.random()*3)+2; mc._xscale = mc._yscale=(mc.speed+mc.yspeed)*10; mc.onEnterFrame = function() { var angle = Math.atan2(_root._xmouse-(width/2), _root._ymouse)+1.5707963267949; this._y += Math.sin(angle)*this.speed+this.yspeed; this._x += Math.cos(angle)*this.speed; if (this._x>width+10) { this._x = -10; } else if (this._x<0-10) { this._x = width+10; } if (this._y>height+10) { this._y = -10; } else if (this._y<0-10) { this._y = height+10; } }; } ------------------------------------------------ 【 AS使用環境 】 Adobe Flash CS3, アクションスクリプト2.0

    • ベストアンサー
    • Flash
  • ムービークリップ(以下mc)を複製したときの深度の設定で困っています。

    ムービークリップ(以下mc)を複製したときの深度の設定で困っています。 使用ソフト:Adobe Flash CS4 professional flashのバージョン:flashlite1.1 duplicateMovieClip(コピー元mc名,新mc名,深度(例えば10など)); と書いてmcの複製はしっかりできているのですが、深度を「レイヤー内で一番上」に設定したいのですが、どう設定していいかわからず困っています。 通常、レイヤーが3つある場合、重ね順で言うと一番上のレイヤーが最前面に、一番下のレイヤーが最背面に設定されています。 そこで、一番下のレイヤーに上記プログラムを書いて一番下のレイヤーにmcを複製したいのですが、複製したmcは一番上のレイヤーよりも最前面に配置されてしまうのです。 duplicateMovieClipを書いているレイヤー内で最上位に配置したい場合、深度にどのような設定をすればいいか教えてください。

  • swapDepths について

    ※FLASH 5 を使っています。 attachMovie で複製した MC での swapDepths について教えて下さい。 まず attachMovie をする為の素材を作ります。 丸い図形を作り、それをボタンにし 『 ボタン1 』 とします。 そのボタンを MC にして 『 MC1 』 とします。 『 MC1 』 をリンケージで識別子を 『 MARU 』 とします。 『 MC1 』 に配置された 『 ボタン1 』 に下記 AS を書きます。 on (press) { this.swapDepths(_root.HAICHI.maxdepth++); startDrag (""); } on (release) { stopDrag (); } 別に配置用の空の MC を作り、ステージ上に配置し 『 HAICHI 』 と名前を付けます。 更にステージ上に 『 ボタン1 』 を配置して、そのボタンに下記 AS を書きます。 on (release) { i ++; _root.HAICHI.attachMovie( "MARU", "MARU"+i, _root.HAICHI.maxdepth++ ); _root.HAICHI["MARU"+i]._x = 50; _root.HAICHI["MARU"+i]._y = _ymouse; } これでボタンを押すと丸い形の MC が複数配置できるようになります。 また複製された MC のうち背後にある MC をクリックすると、その MC が最前面に配置 されるようになります。 ここまでは良いのですが、新たに 『 MC2 』 を作り、そこに 『 MC1 』 を配置します。 つまり『 MC2 』 の中に 『 MC1 』 が配置され 『 MC1 』 の中に 『 ボタン1 』 が配置 されている状態です。 更に 『 MC1 』 のリンケージを解除して、『 MC2 』 にリンケージで識別子を 『 MARU 』 とします。 このようにした場合、ボタンを押すと MC の複製は出来るのですが、MC をクリックしても 最前面には出て来ません。 ムービークリップのムービークリップでは swapDepths は利かないのでしょうか? MC にも AS を書きたいので、どうしても入れ子にしなければなりません。 何か良い方法がありましたら教えて頂けますよう宜しくお願い致します。

    • ベストアンサー
    • Flash
  • 外部ムービー読込み後 AS が動きません

    どなたかお教え下さい。 _root上のMCに外部swfを読み込んだとします。 その読み込まれたswf上のムービーの途中でASでストップstop();、を 入れて途中で一度とめるようにしてありますが、止まりません。 プログラムの知識がないのでずっと悩んでいます。 よろしくお願いいたします。 ■現状■ set_mcという名のMC上に、同じ階層にある01.swfを読み込む。 現在テスト用に、読み込む側は読込みだけ、読み込まれる01.swfは 10フレーム中の5フレーム目にキーフレームをつくり アクションで this.stop(); とだけ書いてあります 読込み側 _root.set_mc.loadmovie("01.swf"); _root.set_mc._lockroot = true; 読み込まれた01.swfの5フレーム目 this.stop(); ------------------------ 01.swf のみならばちゃんと止まるのですが読み込まれると とまりません。非常に初歩的なことかもしれませんが、 どうかよろしくお願いいたします。

    • ベストアンサー
    • Flash
  • どうしてロールオーバーを繰り返すと同じオブジェクトが二重に表示されるのですか??

    こんにちは.またまたみなさまのお力をお借りしにきました. 使っているのは「FlashCS/AS1&2」です. アクションフレームに"nu1"というMCをロールオーバー時拡大,ロールアウト時縮小(もとの大きさ)にするASを記述しています.(他にも”nu2”などの同じ機能を持ったMCもあります.) 正常に動くのですが,フレームを何度か移動して,また"nu1"などにロールオーバーしたとき,"nu1"の上に"nu1"がまた再表示されたりしてしまいます.("nu1"はどのフレームにも存在しています.) 原因は震度の問題なのでしょうか?? 震度に関しては以下のASを記述しています. ("top"というMCが存在するアクションフレームに) top.swapDepths(100000); ("nu1"が存在するアクションフレームに) nDepth = 0; nu1.onRollOver = function() { nu1.swapDepths(++_parent.nDepth); nu1._xscale = 120; nu1._yscale = 120; } 他に試したことは,アクションフレームではなく"nu1"のムービークリップアクションフレームにロールオーバー等のASを記述することもしましたが,同じような現象が起こってしまいます. 原因はなんなのでしょうか??? どうか解決していただけないでしょうか?

  • FLVPlaybackでエラー処理の仕方

    Flash8 AS2 _root.attachMovie("FLVPlayback","mc_flvplayer",this.getNextHighestDepth()); _root.mc_flvplayer._width = 400; _root.mc_flvplayer._height = 300; _root.mc_flvplayer.load("movie/movie01.flv"); FLVPlaybackコンポーネントでflv動画を読み込んでいるんですが、 もしflv動画のパスが間違っていた場合やダウンロード中にエラーが発生した場合の エラー処理をどうすればいいか分かりません。 ヘルプにprogressイベントにそれっぽいことが書いてあるんですが動画のパスが間違っていた場合イベントそのものが発生しません。

    • ベストアンサー
    • Flash

専門家に質問してみよう