アプリ版:「スタンプのみでお礼する」機能のリリースについて

ドラッグで移動可能な二つのムービークリップMCAとMCBから等しい距離の位置に三つ目のムービークリップMCCを配置したいです。

MCCはMCA、MCBがドラッグで移動されると、MCAとMCBへの距離が等しい位置(厳密に等しくなくても良い)に移動させたいです。(結果、3つのムービークリップは一直線上に並ぶ)

オーサリングツールは『ParaFla!』ActionSctiptは1.0相応で以下の様に作ってみましたが、いつまで経っても落ち着かないので改善したいです。

※スクリプトのスペースは全角で記述。
※ベクトルの計算に『HAKUHIN's home page』で公開されているライブラリを使用しました。
http://hakuhin.hp.infoseek.co.jp/main/as/vector. …

■ライブラリの取り込み
_root上に配置したスクリプトに
#FILE "vec2d.as"
と記述。

■MCA、MCB
_root上にMCAを深度0、[固定]で配置。
_root上にMCBを深度1、[固定]で配置。
MCAとMCBにテキストで●を配置。
MCAとMCBに以下スクリプトを記述。
on (press){
 this.startDrag();// ドラッグを開始する
}
-
on (release, releaseOutside){
 this.stopDrag ();// ドラッグを解除する
}

■MCC
_root上にMCCを深度2に配置。
MCCにテキストで●を配置し、以下スクリプトを記述。
onClipEvent (enterFrame){
 c_to_a = _root.Vec2dCreate(_root.MCA._x-_x,_root.MCA._y-_y);
 c_to_b = _root.Vec2dCreate(_root.MCB._x-_x,_root.MCB._y-_y);
 length_c_to_a=_root.Vec2dLength(c_to_a);
 length_c_to_b=_root.Vec2dLength(c_to_b);

 if(length_c_to_a > length_c_to_b){
  long=c_to_a;
 }else{
  long=c_to_b;
 }

 pos_c = _root.Vec2dCreate(_x,_y);
 long=_root.Vec2dNormalize(long);
 long=_root.Vec2dScale(long, 5);
 pos=_root.Vec2dAdd(pos_c,long);
 _x=pos.x;
 _y=pos.y;
}

上記のようにして作成したものを以下に置きます。
http://carken.web.fc2.com/osiete/test.html

動かしてみると、いつまでたっても、細かく動いて止まってくれません。
厳密に同じ距離でなくても良く、ある程度見た目にOKかなってところで止まるようにしたいです。

アドバイスありましたら、よろしくお願いいたします。

A 回答 (1件)

何のためにそれ(ベクトルのas)を使ってそんなに複雑な方法をするのかや,


どんな感じにしたいのかがよくわかりませんが,
もっと単純に,普通によくあるように,
一般的な算数で考えて,
次のようにすれば良いのではないでしょうか?
(ベクトルのasは使いません。)


===例1=========

MCA と MCB のスクリプトはそのままで,
MCC 自体に書くスクリプトを次のようにします。

----------------------------------------------------
onClipEvent (enterFrame){
this._x += ((_root.MCA._x+_root.MCB._x)/2 - this._x)/5;
this._y += ((_root.MCA._y+_root.MCB._y)/2 - this._y)/5;
}
----------------------------------------------------


===例2=========

MCA と MCB のスクリプトはそのままで,
MCC 自体に書くスクリプトを次のようにします。

----------------------------------------------------
onClipEvent (load){
this._x = (_root.MCA._x+_root.MCB._x)/2;
this._y = (_root.MCA._y+_root.MCB._y)/2;
}
-
onClipEvent (mouseMove){
this._x = (_root.MCA._x+_root.MCB._x)/2;
this._y = (_root.MCA._y+_root.MCB._y)/2;
updateAfterEvent();
}
----------------------------------------------------



例1 がゆっくり中心に近づくパターンで,
例2 がマウスの動きに即反応するパターンです。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

式を見て目から鱗。難しく考えすぎてました。

お礼日時:2008/09/14 18:27

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