• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ActionScript 孫のパス)

ActionScriptでのムービークリップのパス指定についての問題

このQ&Aのポイント
  • Flashを編集している初心者が、ActionScriptでムービークリップのパス指定について問題があります。
  • ムービークリップのインスタンス名が「mc1_1」であり、その親である「mc1」の中に存在しています。
  • 「_root.mc1.mc1_1.onRollOver~」のように指定したイベントが動かず、パスが間違っている可能性が考えられます。

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

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

> 「_root.mc1.mc1_1._visible = ~」のように書くと、 > ちゃんと動作していました。 そしたらターゲットパスは合っていると思います。 単に mc1 に onRollOver など,ボタン系のonイベントハンドラメソッドのうちの何か(onReleaseやonPressや…)を書いているのでそっちが優先されるだけではないでしょうか? ボタンが(ムービークリップも)上下に重なったとき,上のボタンの on○○ が優先になります。 ムービークリップの入れ子の場合も,結局親MCは子MCよりも上に表示されていることになりますから, 親子に on○○ を書いた場合,親の on○○ が優先されることになります。 (そういう仕様でないとボタンがたくさん重なったとき一斉に反応してしまって使いにくいです。) ====================== もし, 親にも子にも ボタン系on○○ を書きたい場合は, 1 親の中に子をさらにもう1つ作ってその子に親に書くべき on○○ を書く方法 2-1 親には on○○ を書いた状態のまま,子とマウスとの当たり判定を取る方法 2-2 子には on○○ を書いた状態のまま,親とマウスとの当たり判定を取る方法 の2つ(3つ)が代表的な対処法だと思います。 1の方法の場合, 子の on○○ は有効にはなりますがその間,親に書くべきだった on○○ は無効になります。 2-1の方法の場合, 子に書くべきだった on○○ と,親に書いている on○○ は両方有効になり両方とも動作します。 2-2の方法の場合も, 親に書くべきだった on○○ と,子に書いている on○○ は両方有効になり両方とも動作します。 1の方法はつまり次のようにすれば良いだけです。 ┏━━━━━━━━━━━━━━━ ┃  [__ mc1_1 __] 上レイヤーなど ┃ ┃[______ mc1_2 ______] 下レイヤーなど ┗━━mc1━━━━━━━━━━━ mc1_1 の下レイヤーなど下側に mc1_2 を作成して, 親に書くべき on○○ つまり 「_root.mc1.mc1_2.onRollOver~」 などを書きます。 mc1_1 の左右(x方向)や上下(y方向)にはみ出た mc1_2 の部分の on○○ が有効になります。 2-1の方法(例) --------------------------------- // 親MCに関して _root.mc1.onRollOver = function() { trace("親と当たりました"); }; // 子MCに関して _root.mc1.mc1_1.onMouseMove = function() { if (this.hitTest(_root._xmouse, _root._ymouse, true)) { trace("子と当たりました"); } }; --------------------------------- 2-2の方法(例) --------------------------------- // 親MCに関して _root.mc1.onMouseMove = function() { if (this.hitTest(_root._xmouse, _root._ymouse, true)) { trace("親と当たりました"); } }; // 子MCに関して _root.mc1.mc1_1.onRollOver = function() { trace("子と当たりました"); }; --------------------------------- traceは勝手に書いただけで,実際はこの部分は何かさせる動作に変えます。 また, onRollOver の代用なので, 当たり判定の方は onMouseMove を使用していますが, onRelease の代用であれば onMouseUp, onPress の代用であれば onMouseDown を使用するなど, この辺は変える必要があります。

micco4
質問者

お礼

ありがとうございます! お礼が遅くなってしまいごめんなさい。 今回は時間がかなり限られていたので 学校の先生と相談しながら 結局座標で処理しました(^^; ですがこれからご回答を参考にもっと勉強させていただきます! FLASHは奥が深いですね…。 お礼ポイントをもっと差し上げたい思いですが これでご勘弁くださいm(_ _)m 本当にありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ActionScript2.0のイベントについて

    親ムービークリップに配置した子ムービークリップのイベントが実行されなくて困っています。 親ムービークリップ自体には下記のイベントを設定しています。親ムービークリップはattachMovieで動的に配置しています。 onRollOver・・・onEnterFrameを設定 onRollOut・・・onEnterFrameを削除 子ムービークリップを配置して子ムービークリックにイベントを設定しました。onEnterFrameをは実行されますが、onReleaseが実行されず困っています。 function Parent() { this.onRollOver = function() { this.onEnterFrame = function(){・・・} } this.onRollOut = function(){ delete this.onEnterFrame; } this["child_mc"].onRelease = function() { trace('a') // 実行されない } this["child_mc"].onEnterFrame = function() { trace('b') // 実行される } } ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ _root.attachMovie("Parent", "parent_mc", _root.getNextHighestDepth(), new Parent()); 子ムービークリップはオーサリングで静的にParentに配置し、プロパティでchild_mcと設定しています。 onReleaseは実行できず、そこで止まっています。 なんでも良いので教えてください。

    • ベストアンサー
    • Flash
  • ActionScriptでの繰り返し記述をすっきりまとめたい

    FLASHのActionScriptを勉強中です。 繰り返し同じ様なものを記述する場合、for文か何かを使うと思うのですが、以下の場合はどうすればいいのでしょうか? *プログラムの内容は複数のインスタンスを表示してクリックで順次消えるというものです。インスタンスに記述ではなく、フレームに記述しています。(イベントハンドラメソッド) this.b1.onRelease = function(){ _root.b1._visible = false; }; this.b2.onRelease = function(){ _root.b2._visible = false; }; this.b3.onRelease = function(){ _root.b3._visible = false; };      以下繰り返し… お詳しい方、よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • actionscript2.0から3.0へ、

    actionscript2.0から3.0へ、 actionscript2.0から3.0へ、 大変申し訳ございませんが、 どなたか書き換えていただけないでしょうか? 情報が足りない場合ご指摘くださいましたら 追記いたします。 flash8にて制作されたFlaをCS4にて修正しています。 3.0がわかるものが出来なくなってしまったので、 こちらに書かせていただきました。 400フレームのものなのですが、1フレームに下記のスクリプトがあります。 btnSkip.onRelease = function() { this._visible = false; gotoAndStop("end"); btnRepeat._visible = true; } 400フレーム目には下記のスクリプトがあります。 stop(); btnRepeat._visible = true; btnSkip._visible = false; btnRepeat.onRelease = function() { gotoAndPlay("start"); this._visible = false; btnSkip._visible = true; } みたところステージには、スキップとリピートのムービークリップがあります。 スキップをクリックすると、400フレーム目に飛んでストップ、リピートを押すと1フレーム目に戻って再生、という動作です。 修正前(2.0)は正常に動作していました。 これを3.0に書き換えていただきたいのです。 大変恐縮なのですが、大至急直さないといけないのです。。 よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • パスの書き方 AS3

    シーン1にムービークリップ(インスタンス名mcop)を配置し、mcopの1フレームにムービークリップ(mc)とobject1(グラフィック)を配置、mcの1フレーム目にアクションスクリプト(ActionScript3)を配置します。 アクションスクリプトからobject1を非表示にする指示を出したいのですがうまくできません。 パスの書き方をアドバイスください。(同階層ではうまく非表示に出来ます。) root.mcop.object1.visible = false;  こんな感じでやってみましたがだめでした。

    • ベストアンサー
    • Flash
  • 【action script】複数のMCを・・・

    環境:Flash8 actionscript2.0 10こ程度のムービークリップをそれぞれクリックした時に同じ動きをさせる文を1つにまとめることは可能でしょうか? ムービークリップそれぞれに mc1 mc2 mc3 …mc10 とインスタンス名をつけています。 さらにその下位層に mc1  └kai_mc mc2 └kai_mc ・ ・ ・ mc10 └kai_mc と置いています。 このそれぞれのムービークリップをクリックした際、その下位層のムービークリップを次のフレームに移動させたいと考えています。 それぞれ個別に書くと _root.mc1.onRelease=function(){ _root.mc1.kai_mc.nextFrame() } と書いていたのですが、ムービークリップの数を増やすかも知れずムービークリップの数分書くのは大変なので1つにまとめたいと考えています。 自分で以下のように書いてみました。 i=0 for(i=1; i>10; i++){ _root["mc"+i].onRelease.function(){ _root["mc"+i].kai_mc.nextFrame() } } うまくいかないので試行錯誤したりtraceで調べたりしたのですがどうもよくわかりません。 i=0 for(i=1; i>10; i++){ _root["mc"+i].onRelease.function(){ trace(i) } } で出力すると 11と表示されるのでpassが違うとは思うのですが・・・ iを1~10で指定しているのになぜ11となるのでしょうか? どうすればpass指定できるのでしょうか? そもそものやり方、考え方が違うかどうかも含め、教えて頂きたく質問しました。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • 【ActionScript】ムービークリップ間の変数の受け渡しのやり方は?

    ムービークリップ間の変数の受け渡しがいまいちわかりません。 例えば、 ・_root.mc1 及び、 ・_root.mc1.mc2 というインスタンスがあった場合、 _root.mc1.mc2 のフレームに a = 100; と書き、 _root.mc1 のフレームに trace(_root.mc1.mc2.a); と書いても「undifined」と出るだけです。 (上層の値を下層で受けることはできるんですが、この例のように下層→上層の受け渡しはできないのです。) どうすればインスタンス間の変数の受け渡しができるのでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • FlashのActionScriptについて質問です。

    FlashのActionScriptについて質問です。 Flash CS4のAS2.0を使用 ActionScriptの書き方で (1)ボタンインスタンスに書く (2)対象のインスタンスのフレームに書く (3)ActionScript専用のフレームを作成しそこへ書く 参考書等を読んでいるとActionScriptを書くときに、上記3つの方法が あり混乱しています。 それぞれ、どのような違いがあるのでしょうか?また、どのように使い分けるのでしょうか? Flashに関しては、始めたばかりの超初心者です。どうぞ宜しくお願いします。

  • addchildからrootに命令

    flash cs3、actionscript3.0で制作しています。 メインのタイムラインに var tra:trailer = new trailer(); stage.addChild(tra); と書いてライブラリー内にあるクラス名trailerのムービークリップを生成しています。 この生成されたtrailerの中にボタンがあってそこからrootに置いてあるムービークリップに命令を出したいのですが、actionscript2.0だったら_rootや_level0を使って書けたんですがactionscript3.0だとパスがわかりません。 どなたか分かる方いませんか?

    • ベストアンサー
    • Flash
  • Flash(ActionScript3.0)

    Flash(ActionScript3.0)でゲーム制作を行っています。 ActionScriptもFlashも最近初めて触れた初心者で、分からないことがたくさん湧いてきて困っています。 よろしければご回答お願い致します。 インスタンスをドラッグすることができる、という要素と、 インスタンスをクリックすると45度回転する、という要素を同時に入れたいのですが、 同時にプログラムを組むとドラッグだけをすることができず、 どうしてもドラッグ後に45度回転してしまいます。 (プログラムのソースはネットから拾ってきたものです)。 どうすればドラッグと回転を分けることができるのでしょうか。 プログラム自体は以下のように組みました。 ご回答いただければ嬉しいです。 よろしくお願い致します。 //インスタンスの回転プログラム mc1.addEventListener(MouseEvent.CLICK, kaiten); function kaiten(event:MouseEvent) { mc1.rotation += 45; } //インスタンスのドラッグプログラム //インスタンスの0点からのマウス座標用変数 var mc1X:int; var mc1Y:int; //マウスがインスタンスを押したらsec1開始 mc1.addEventListener(MouseEvent.MOUSE_DOWN,sec1); //sec1 マウスダウン座標確認、sec2開始 function sec1(event:MouseEvent):void { mc1X = event.localX; mc1Y = event.localY; addEventListener(MouseEvent.MOUSE_MOVE,sec2); } //sec2 インスタンス移動 function sec2(event):void { mc1.x = mouseX-mc1X; mc1.y = mouseY-mc1Y; //低FPSマウス移動スムーズ対応 event.updateAfterEvent(); } //マウスが離れたらsec3開始 stage.addEventListener(MouseEvent.MOUSE_UP,sec3); mc1.addEventListener(MouseEvent.MOUSE_OUT,sec3); //sec3 sec2停止 function sec3(event):void { removeEventListener(MouseEvent.MOUSE_MOVE,sec2); }

  • ActionScript2.0

    actionscript2.0で作成をしている初心者です 今、ドラッグが可能なムービークリップを作成し、 その下の階層にボタンを作成しています。 onClipEvent (enterFrame){ this.onPress = function(){ドラッグ開始} this.onRelease = function(){ドラッグ終了} this.button1.onPress = function(){ボタン押した処理} [現状] ムービークリップをドラッグ不可能にすれば、ボタンを押すことは可能なのですが、ドラッグ可能にするとボタンが押せなくなります。 ムービークリップのドラッグが可能で、かつムービークリップ階層下のボタンを有効にするためにはどうしたらよいでしょうか。 宜しくお願いします