- ベストアンサー
ムービークリップのドラッグ
A、Bの2つのムービークリップがあって、AをドラッグするとBも一緒についてくるというスクリプトを書いているのですが、どうしても、Bの方が遅れてしまいます。完全に同期させる方法はないのでしょうか。 ちなみに、BにonClipEvent(mousemove)でAの座標をとって、そこからBとの差をひいて、Bの座標を書き換えるスクリプトを書いています。
- みんなの回答 (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のインスタンスが複数必要で、どれも似たような動きをさせたい場合は、こちらの方が便利です。
その他の回答 (1)
- DPE
- ベストアンサー率85% (666/776)
再び、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さんの目指しているものと私の考えているものが、違っているのかも知れません。だとしたら、的外れな回答で大変申し訳ないのですが。。。
お礼
大変失礼しました。 前回いただいたご回答で、キレイに動きました。 AとBがくっついているので、mouseMoveだと微妙なずれがすごく気になっていたのですが、これで問題が解決しました。感謝してます。ありがとうございました。
お礼
ありがとうございます。 コピペしてみましたが、 if (this.***.hitTest (_root._xmouse , _root._ymouse , true)) 及び if (this.hitTest (_root._xmouse , _root._ymouse , true)) の部分で、シンタックスエラーが出てしまいました。