• ベストアンサー

ムービークリップのドラッグ

A、Bの2つのムービークリップがあって、AをドラッグするとBも一緒についてくるというスクリプトを書いているのですが、どうしても、Bの方が遅れてしまいます。完全に同期させる方法はないのでしょうか。 ちなみに、BにonClipEvent(mousemove)でAの座標をとって、そこからBとの差をひいて、Bの座標を書き換えるスクリプトを書いています。

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

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

AとBの位置関係が変わらないまま、AをドラッグするとBも動く・・・というのでしたら、次のような考え方をしてみてはいかがでしょう。 まず、ムービークリップAとBのインスタンスを作り、ご希望の位置関係になるように配置します。この2つを選択した状態で更にシンボルに変換して、ムービークリップCを作ります。つまり、ムービークリップCは、内部にAとBのインスタンスを持つムービークリップというわけです。 次に、「Cの中のAの上でマウスボタンが押されたら、C全体をドラッグ可能にする」というアクションを設定します。すると、AをドラッグするとBも一緒に動くので、一見、AとBが連動して動いているように見えます。ですが、実際はCという1つのムービークリップが動いているだけですから、動くタイミングはズレません。 Aがボタンではなくムービークリップの場合、「Aがドラッグされたかどうか」は、hitTestを利用して、「マウスのボタンが押された時、マウスカーソルがAと重なっていたかどうか」を見ることで判定できます。 仮に、ムービークリップCのインスタンス名を ins_C 、Cの中のAのインスタンス名を ins_A とすると、ins_Cに設定するスクリプトはこんな感じでしょうか。  onClipEvent(mouseDown)  {   //Aの上にマウスカーソルがある場合、ドラッグ開始   if (this.ins_A.hitTest (_root._xmouse , _root._ymouse , true))   {    this.startDrag();   }  }  onClipEvent(mouseUp)  {   this.stopDrag();  } なお、ステージ上のCのインスタンスにではなく、ムービークリップCの編集画面で、Cの中にあるAのインスタンスに  onClipEvent(mouseDown)  {   if (this.hitTest (_root._xmouse , _root._ymouse , true))   {    _parent.startDrag();   }  }  onClipEvent(mouseUp)  {   _parent.stopDrag();  } ・・・のようにスクリプトを設定しても、同じ動作になります。ムービークリップCのインスタンスが複数必要で、どれも似たような動きをさせたい場合は、こちらの方が便利です。

inuichi
質問者

お礼

ありがとうございます。 コピペしてみましたが、 if (this.***.hitTest (_root._xmouse , _root._ymouse , true)) 及び if (this.hitTest (_root._xmouse , _root._ymouse , true)) の部分で、シンタックスエラーが出てしまいました。

その他の回答 (1)

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

再び、DPEです。 #1のスクリプトは、ブラウザで見やすくするためにインデントを全角のスペースで付けていますが、実際のスクリプトでは、構文の中に全角のスペースが混ざっているとシンタックスエラーになります。コピーして使う時は、各行に入っている全角のスペースを、全て半角のスペースかタブに置き換えて下さい。 ところで、回答してしまってからふっと思ったのですが・・・ AとBの位置関係が固定なら、Bのムービークリップの位置は、Aがドラッグ中かどうかに関係なく、常にAと一定の距離に保っておけばいいのではないでしょうか? つまり、#1のような七面倒なことをしなくても、Bに  onClipEvent(enterFrame)  {   this._x = _root.a._x + dist_x;   this._y = _root.a._y + dist_y;  } (Aのムービークリップのインスタンス名を a 、AとのX軸方向の差分を dist_x 、Y軸方向の差分を dist_y とします) ・・・というアクションを設定すると、Aがドラッグ中であろうがなかろうが、Bは常にAの座標に差分を足した位置に表示されます。Aがドラッグされていなければ、Bも止まったままになります。 イベントを mouseMove にして同様のスクリプトをざっと試してみたところ、それほどBが遅れて動くようには見えませんでした。 もしかしたら、inuichiさんの目指しているものと私の考えているものが、違っているのかも知れません。だとしたら、的外れな回答で大変申し訳ないのですが。。。

inuichi
質問者

お礼

大変失礼しました。 前回いただいたご回答で、キレイに動きました。 AとBがくっついているので、mouseMoveだと微妙なずれがすごく気になっていたのですが、これで問題が解決しました。感謝してます。ありがとうございました。

関連するQ&A