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











