電子書籍の厳選無料作品が豊富!

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

A 回答 (2件)

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のインスタンスが複数必要で、どれも似たような動きをさせたい場合は、こちらの方が便利です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/09/12 15:35

再び、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さんの目指しているものと私の考えているものが、違っているのかも知れません。だとしたら、的外れな回答で大変申し訳ないのですが。。。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/09/12 18:55

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