マウスを追いかけるムービークリップの実装方法

このQ&Aのポイント
  • マウスを追いかけるムービークリップが別のシンボル内にあると座標がずれる問題が発生しました。
  • 問題を解決するために、下記のスクリプトを使って座標のずれをなくすことができます。
  • 詳細は、シーン1に配置したシンボル(ただの図形と追いかけてほしいムービークリップ:mc1)に以下のスクリプトを追加します。
回答を見る
  • ベストアンサー

マウスを追いかける

ムービークリップがマウスを追いかけるというようにしたいのですが、追いかけるムービークリップが別のシンボルの中にあると座標がずれるようで、このずれをなくしたいのですがどのようにすればよいのでしょうか? 詳しくは、シーン1にシンボル(ただの図形と追いかけてほしいムービー:mc1)を置いて、mc1に下記のスクリプトを書きました。 -------------------------------------------- onClipEvent (load) { _root.mc1.startDrag(true); x = _root._xmouse; y = _root._ymouse; } onClipEvent (enterFrame) { _x += (_root._xmouse-_x)/4; _y += (_root._ymouse-_y)/4; } --------------------------------------------

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

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

  • ベストアンサー
  • DPE
  • ベストアンサー率85% (666/776)
回答No.1

結論から書きますと、  onClipEvent(enterFrame)  {   //親の中心点を基準とするマウスカーソルの座標を追いかける   _x += ( _parent._xmouse - _x ) / 4;   _y += ( _parent._ymouse - _y ) / 4;  } (↑各行頭に全角のスペースが入っています。コピーして使う場合は、全て半角のスペースかタブに置き換えてください。このまま使うとシンタックスエラーになります) で、いかがでしょう。 ------------------------------------------------ ムービークリップの位置を保持する _x と _y プロパティには、親の中心点を基準にした座標が入っています。 ムービークリップ mc1 が他のシンボルの中にある場合、mc1 の座標である _x と _y プロパティには、親シンボルの中心点を ( 0 , 0 ) とする座標が入ります。 一方、マウスカーソルの位置を見るには、一般に _root._xmouse と _root._ymouse プロパティが使われますが、これにはステージの左上を ( 0 , 0 ) とした座標が入っています。 この2つは座標を取る基準が違うので、基準が違うもの同士を参照して座標を決めようとすると、当然、ズレが生じます。 _xmouse と _ymouse プロパティはムービークリップであればどれでも持っているもので、ムービークリップの中心点から見たマウスカーソルの位置が保存されています。 ムービー全体(ステージ)は通常は _root という名前のムービークリップとして扱い、その中心点は左上です。 ステージに配置されているインスタンスは全て _root の子であり、その _x と _y プロパティにはステージの左上を ( 0 , 0 ) とする座標が格納されます。 つまり、_root の _xmouse と _ymouse を見るとステージの左上を基準とするマウスカーソルの位置が分かるので、ステージに配置したムービークリップがマウスカーソルを追いかけるといった作品によく利用されています。 しかし今回は、mc1 はステージに直接ではなく、あるシンボルの中に入っているため、_x と _y には親シンボル(のインスタンス)の _x と _y を基準にした座標が入っています。 あるシンボル内にある mc1 がマウスカーソルを追いかけるには、mc1 が存在するのと同じ座標系、つまり mc1 の親の中心点を基準とするマウスカーソルの座標を見て位置を決めるのが一番簡単です。 これなら同じ基準から見た座標同士なので、ズレも生じません。 _parent は親にあたる階層を指す表現です。 つまり、_parent._xmouse と _parent.ymouse を見ると、mc1 と同じ基準から見たマウスカーソルの位置が分かるというわけです。

fujitubo
質問者

お礼

DPE様返答ありがとうございますm(__)m 大変参考になりました~(^∇^) 上手く動くようになりました。 本当にありがとうございました。

関連するQ&A

  • マウスに追従するクリップの範囲について

    はじめて投稿します。初心者ですが、よろしくお願い致します。 マウスに追従するムービークリップについて onClipEvent(enterFrame){ this._x += (_root._xmouse - this._x)/10; this._y += (_root._ymouse - this._y)/10; } としておりますが、マウスがムービーの中に入ったときだけ 反応するようにし、マウスがムービーの外にでるとムービー クリップが定位置に戻るようにしたいのですが よい方法がありましたら教えてください。 定位置に戻るときも追従の流れを残したまま、ゆっくり定位置に 戻るようにしたいと思っております。 よろしくお願いいたします。 Win XP : MX 2004

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

    • ベストアンサー
    • Flash
  • マウスカーソルについてくる前に左上にいってしまう。

    こんにちは。 マウスカーソルについてくるムービークリップをマスクにして使用したいため、 目的のムービークリップに onClipEvent (enterFrame) { _x += _xmouse/3; _y += _ymouse/3; } というActionScriptを入れました。 きちんと思うように動くのですが、 読み込んだあと、一瞬まず左上に移動してしまいます。 マウスカーソルをうごかして、はじめてマウスカーソルに近づいてきます。 左上に移動してしまうのは格好が悪いので、配置した位置からマウスカーソルに近づいて欲しいのですが、色々調べてもその説明がありません。 どうかよろしくお願いいたします。

    • ベストアンサー
    • Flash
  • 移動範囲を指定したい

    マウスを追いかけるMC1の追いかける範囲を指定したいのですがうまくいきません; 細かい指定としては↓ (1)画面の下1/5ぐらいのMC2の中にはMC1は入れない (2)マウスがMC2の中にある時はMC1はy座標は変化なし x座標はマウスを追いかける(つまり、横にしか動かない) (3)マウスがMC2から出てきたら、再びMC1はマウスを追いかける 現状としては ------------------------------------------- onClipEvent (enterFrame) { if (this.hitTest(_root.ki.kusa)){ _x += (_parent._xmouse-_x)*0.1; this._y += 0; }else{ _x += (_parent._xmouse-_x)*0.1; _y += (_parent._ymouse-_y)*0.1; } } ------------------------------------------- これでは、マウスがMC2から出てきた時に、MC1がMC2から離れないという様になってしまうのですがどうすればいいでしょうか??

  • Suzkaでダイナミックテキストに座標を表示

    FLASH Suzkaで作成しています。 ダイナミックテキストに座標を表示させたいのですが、 下記のサイトを参考にしましたが、うまくいきません。 http://orange.2-d.jp/flash/action/20_mouse_xy_get_preview.html ↓「FLASHでの座標取得」-過去記事-教えて!goo http://oshiete1.goo.ne.jp/qa1087211.html x座標とy座標を表示させるためのダイナミックテキストと、 スプライト1を用意してこのように並んでいます。 スプライト1 x座標 y座標 スプライト1には、下記のスプリクトを記入しました。 onClipEvent (enterFrame) { _root.x=_root._xmouse; _root.y=_root._ymouse; } あと、過去記事を読むとダイナミックテキストをムービークリップにと 書いていたので、ムービークリップ=スプライト?(Suzuka)と解釈して x、y座標のダイナミックテキストを、それぞれスプライトにして試しましたが うまくいきませんでした。 Suzukaで座標をダイナミックテキストに表示する方法を 教えてください。 宜しくお願いします。

    • ベストアンサー
    • Flash
  • 外部swfを読み込んだときだけMouse.hide();させたい。

    よろしくお願いします。 ドキュメント上に空のムービークリップを作り、その中の入れ子のボタンを押すと外部swfを表示するflashを作ったのですが、その外部swf、仮にhoge.swfを読みこんで、そのときだけマウスを隠して(ムービークリップをマウス代わりに)、ボタンで違う外部swf、仮にogeをよみこんだときはマウスを表示させることは可能でしょうか? onClipEvent (enterFrame) { this._x=_root._xmouse; this._y=_root._ymouse; Mouse.hide(); } 上記のスクリプトでマウスを消すと、ogeを読み込んでもマウスが消えっぱなしです。 多分if文を使って if (hogeを読み込んだら){ this._x = _root._xmouse; this._y = _root._ymouse; Mouse.hide(); } //そうでなかったら、 else { Mouse.show(); } みたいな感じなのでしょうが、うまく機能しません・・・。 ご教授お願い致します。

    • ベストアンサー
    • Flash
  • AS2をAS3にしたい

    AS2で書かれたスクリプトの一部があります。下記をAS3にしたいのですが。 ちなみに、mcはインスタンス名です。  onClipEvent (load) {      pointX = 10;     pointY = 20;  }  onClipEvent (mouseMove) {       _root.mc._x = _root._xmouse + pointX;       _root.mc._y = _root._ymouse + pointY;     }

    • ベストアンサー
    • Flash
  • マウスの移動方向によってマウスカーソルの画像を切り替えたい

    今、マウスカーソルを(右向きの)車の画像にしています。 マウスを右方向に動かしたら、右方向の車の画像にし、逆に左方向に動かしたら左方向の車の画像に切り替える、という処理は可能でしょうか?可能である場合、どのようなスクリプトを書けばよいのでしょうか? マウスのx座標の値の増減で判断する、ということは想像できるのですが、書き方が分かりません。 右向きの車の画像のムービークリップ「car」のインスタンスには、下のスクリプトを記述しています。 onClipEvent (load) { Mouse.hide(); } onClipEvent (mouseMove) { this._x = _root._xmouse; this._y = _root._ymouse; updateAfterEvent(); } バージョンはMXです。 どうかよろしくお願いいたします。

    • ベストアンサー
    • Flash
  • 慣性の効果がついたマウス追従

    マウス追従の効果で教えてください。 http://www.flashiroha.com/script/as8.htmlの慣性効果付加型のスクリプトは AS2.0で書かれています。 onClipEvent(load) { vx=0; vy=0 } onClipEvent(enterFrame) { vx=vx*0.65+(_root._xmouse-this._x)/a; vy=vy*0.65+(_root._ymouse-this._y)/a; this._x+=vx; this._y+=vy; } これをAS3.0で作成していますが、マウスに追従するどころか大きくステージから離れてしまいます。 どのように記述をしたらいいでしょうか。 my_mc.addEventListener(Event.ENTER_FRAME,onEnterframe); var vx ; var vy ; function onEnterframe(eventObj:Event):void{ vx= my_mc.x*0.65+(stage.mouseX-my_mc.x)/2; vy= my_mc.y*0.65+(stage.mouseY-my_mc.y)/2; my_mc.x+=vx; my_mc.y+=vy; trace(my_mc.x); }

    • ベストアンサー
    • Flash

専門家に質問してみよう