プロが教えるわが家の防犯対策術!

ムービークリップがマウスを追いかけるというようにしたいのですが、追いかけるムービークリップが別のシンボルの中にあると座標がずれるようで、このずれをなくしたいのですがどのようにすればよいのでしょうか?
詳しくは、シーン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;
}
--------------------------------------------

A 回答 (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 と同じ基準から見たマウスカーソルの位置が分かるというわけです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/10/06 18:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!