• ベストアンサー

入れ子になっているMCのクリック判定について

Flash ver9 AS2.0 使用です。 親MCの中に子MCがいる構造です。 親MCはロールオーバーで移動、ロールアウトで元の位置へ戻るボタンアクション(onRollOver、onRollOut)を付けています。 その中にいる子MCにもロールオーバーで拡大するというアクションを付けていますが、 こちらにはonClipEventで接触判定(hitTestメソッド)で拡大するかどうかを判断しています。 分からないのは、この子MCをクリックした時に他のシーンへ移動させたいのですが、苦し紛れで onClipEvent (enterFrame) { if (this.hitTest(_root._xmouse, _root._ymouse, true)) { //拡大処理 } onClipEvent(mouseDown){ //シーン移動処理 } としても、シーン移動が出来ませんでした。(当たり前ですよね…) hitTestメソッドのクリック判定バージョンがあれば良いのですが、 検索不足か本当に無いのか見つけられませんでした。 分かり難い説明かとは思いますが、シーン移動のさせ方、またはクリック判定の仕方を教えていただきたいです。

  • ayass
  • お礼率33% (7/21)
  • Flash
  • 回答数2
  • ありがとう数1

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

  • ベストアンサー
回答No.2

単純ですが親にやらせればいいでしょう onClipEvent(mouseDown){ //シーン移動処理 } ↓ 親の方に移動 ↓ onClipEvent(mouseDown){ if(this["子のインスタンス名"].hitTest(_root._xmouse, _root._ymouse, true)) { //シーン移動処理 } }

その他の回答 (1)

回答No.1

重ね順的に子MCは親MCの下にあるので 親のonRollOver、onRollOut判定が上に乗っかっているため 子の判定は反応できません。 なので、たとえば 親MCを子MC2にして、子MCと同じタイムラインに置きます。 子MC、子MC2を同時選択して、それを親MCとします。 インスタンス名を親MC=oyaとします。 で、ためしに子MC2(かつての親MC)をRollOverした時は _root.oya._x+=10 RollOutした時は _root.oya._x-=10 とすると子MC、子MC2の両方が同じ動きをします。 子MCの判定も反応します。(上に他の命令が乗っかっていないので) たぶん別の問題が出てくるような気がしますが、とりあえず これで一歩前進できると思います。

関連するQ&A

  • MCのクリックした部分をゆっくり中央に移動させたい。

    back_mcをサイズ(600,400)のシーン上に配置し、 シーンに下記フレームスクリプトを記入し、 MCのクリックした部分を中央に移動させましたが、 これを緩やかに移動させるにはどのようにすればよいでしょうか? back_mc.onRelease = function () { _root.back_mc._x = _root.back_mc._x +(300 - _root._xmouse); _root.back_mc._y = _root.back_mc._y +(200 - _root._ymouse); }

    • ベストアンサー
    • Flash
  • 複数のmcに同じイベントを記述したら、1つしか反応しない

    うまくいかない原因がわからず困っています。 画面上の複数のmcに同じイベントを記述しました。 内容はシンプルで、「mc01にマウスがのったらフレームf01に移動する、 マウスが離れたらフレームstartに戻る」というものです。 mc02はf02へ、mc03はf03へ移動というふうにします。 これをmc01からmc07まで順番に書いていったところ mc07は反応するのですが、あとの6つが反応しません。 mc07の記述を消すとmc06が反応するようになり、 どうやら一番最後に記述している部分しか反応しないようです。 これ↓がそれぞれのmcに書いてるASです。 ---------------------------------------------------------- onClipEvent (enterFrame) { if (_root.mc01.hitTest(_root._xmouse,_root._ymouse,1)) { _root.gotoAndPlay("f01"); } else { _root.gotoAndPlay("start"); } } ---------------------------------------------------------- ちなみにFlash8使用、プレイヤー8でパブリッシュしてます。 どうぞよろしくお願いします。

    • ベストアンサー
    • Flash
  • hitTest(_root._xmouse, _root._ymouse, true)が有効になりません

    WinXP,Flash8pro,photoshopCS2,IllustratorCSで オーサリングしています。 フォトショとイラレでPNG画像を作成し、 Flash8Proに読み込んでステージに配置し、 MCに変換してから hitTestスクリプトで hitTest(_root._xmouse, _root._ymouse, true)としようとしていますが、 hitTest(_root._xmouse, _root._ymouse, false)で 処理されてしまいます。 FireWorksで作成したFireWorksPNG形式だと 正常にTrueで動作します。 フォトショやイラレのPNGでは透過部分を判別し、True判定できないのでしょうか? また、どのようにしたらフォトショやイラレのPNGを Trueで処理できるのでしょうか。 どうぞ宜しくお願い致します。

    • ベストアンサー
    • Flash
  • flashのMCの中にMCを入れてその中のボタンでシーンを移動したいのですができません

    flashの シーン1で大元になる5つのMCで構成された大元のMCにはonClipEvent (enterFrame)のスクリプトを記述しています。 その5つのMCの中、それぞれに、ボタンがあります。そのボタンはシーン1からシーン2に飛ばすアクションをつけているのですが、まったく反応しません。 なぜか、同一シーンのフレーム移動は反応するのですが。ボタンの記述は下記です。 on (release) { _parent._parent.gotoAndPlay("work", 1);

    • ベストアンサー
    • Flash
  • カーソルのカスタム

    flash ver.9 AS2.0 使用です。 カーソルを自分で制作したムービークリップ(MC)にする方法を教えていただきたいです。 MCに直接スクリプト onClipEvent (mouseMove) { _x = _root._xmouse; _y = _root._ymouse; } を書く方法は分かるのですが、 知りたいのは フレームアクションで制御する方法です。 多分、とても初歩だと思うのですが、よろしくお願いします。

    • ベストアンサー
    • Flash
  • flash as2.0 hitTest()について

    FLASHMXで作業をしています。 mcが壁に当たると反対方向にmcを移動させたいのですが 以下では、うまくいきません。理由がわかりませんし打開策も わかりません。解決策を教えてください。よろしくお願いいたします。 onClipEvent(load){ this._x=100; this._y=380; } onClipEvent(enterFrame){ this._y -=3; if(_root.tama_mc.hitTest(_root.kabe_mc)==true){ this._y +=5; } }

  • AS3 MC内ボタンクリックでシーン1上MC2動く

    AS3にて、 シーン1上に、MCとMC2を配置し、MC内にはボタン(mc_button)を配置します。 (入れ子のボタンを作りたい) mc_buttonを、クリックすると、MC2が動く(横に1移動)ようにしたいのですが。 AS3では、_rootが使えないので、どうしたらよいのか分かりません。 AS3では、出来ないのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Flash
  • マウス 追従 範囲外

    マウスを追いかけるMCを以下のように設定しましたが、 MCが動いている範囲外にマウスがいるときは追いかけるのを やめにしたい場合どのように記述すればよろしいでしょうか。  onClipEvent (mouseMove) { if (_root._xmouse >左 && _root._xmouse <右) { this._x = _root._xmouse; } if (_root._ymouse >上&& _root._ymouse <下) { this._y = _root._ymouse; } } 範囲外にマウスがいるときは定位置にmcを表示させるか、 表示を消したいです。 ちなみにmcが動く範囲の指定方法はネット上から探してきました。 別の方法でもっと適した記述があれば教えてください。

  • Flash MCにロールオーバーするとスライドインするテキスト

    これをなんとかやってみようと試行錯誤してますがうまくいきません。ロールオーバーさせようとしているMCはマウスがロールオーバーすると拡大するというスクリプトが書かれています。このアクションと同時にマウスのロールオーバー時にテキストをスライドインさせたいのですが、どのようなスクリプトをかけばよいでしょうか? 透明ボタンを作って拡大されたMCとの当たり判定でテキストをスライドインさせる等の試行錯誤をしましたがうまくいきません。どうかご教授よろしくお願いします。 プライベートのチューターとして、時給でチューターを探そうとさえ考えています。

  • インスタンス名の変更mcどうしのhittest

    お世話になります。Flash,actionscriptの初心者です。 現在actionscript2.0でちょっとしたFlashコンテンツを作っているのですが、解決できない ことがあり、ぜひお知恵を拝借できればと思います。 詳しくは添付図をご覧いただきたいのですが、 A1_mcとB1_mcのムービークリップをhittestで衝突判定させ、 B1_mcは見えないようにし、 A1_mcはgotoAndPlay(2)で2フレーム目にします(☆の絵)。 同時にthis._name="C1_mc"でインスタンス名を変更しました。 (ここまでは大丈夫で、trace(this._name)でも変更が確認できる。) 同じようにA2、B2、C2も設定しました。 そして、姿(○⇒☆)とインスタンス名(A⇒C)と変わった C1_mcとC2_mcをhittestで衝突判定させてD_mc(■)を見えるようにしたいのですが、 何も起きず、hittestが発動していないのではと思ってしまいます。 説明がわかりにくいと思うのですが、インスタンス名を変更した物どうしのhittestを うまく発動させるにはどうしたらよいか、教えていただきたいのです。 にわか知識のためFlashやactionscriptの根本的な問題を理解できてなさそうです・・・。 ちなみに何がやりたいかというと、○と○、○と☆ではお互いに反応しないが、 ○と◇が合体して☆になったもの同士(☆と☆)が接触すると、反応して■が出現する・・・ そんなFlashを作りたいのです。 自分の現状のやり方以外でこれが実現できるのなら、それでも大歓迎です。 長文になりましたが、ぜひともよろしくお願いいたします。 <参考・・自分の組んだAS> A1_mc.onEnterFrame = function() { if (this.hitTest(_root.B1_mc))     { _root.B1_mc.gotoAndPlay(2); //2フレーム目(空のキーフレーム)にとび、B1を消す this.gotoAndPlay(2);  //○⇒☆(2フレーム目)に姿を変える this._name="C1_mc"; //インスタンス名をA1_mcからC1_mcに変える     trace(this._name); //インスタンス名の変更を確認する。 delete this.onEnterFrame;     } else{ } }; A2_mc.onEnterFrame = function() { if (this.hitTest(_root.B2_mc))     { _root.B2_mc.gotoAndPlay(2); //2フレーム目(空のキーフレーム)にとび、B1を消す this.gotoAndPlay(2);  //○⇒☆(2フレーム目)に姿を変える this._name="C2_mc"; //インスタンス名をA2_mcからC2_mcに変える     trace(this._name); //インスタンス名の変更を確認する。 delete this.onEnterFrame;     } else{ } }; C1_mc.onEnterFrame = function() { if (this.hitTest(_root.C2_mc))     {     this.visible = false ; //姿を消す _root.C1_mc.visible = false; _root.D_mc.gotoAndPlay(2); //D_mcの出現(D_mcの1フレーム目は透明で見えなくしている。2フレーム目からアニメーションさせたいのでvisibleは使わない)     delete this.onEnterFrame; }   else{ } };

    • ベストアンサー
    • Flash

専門家に質問してみよう