0

x、y ポイントのセットに沿ってムービークリップをアニメーション化するムービークリップ スポナー クラスとアニメーター クラスを作成しました。Greensock の TweenMax を使用してアニメーションを作成し、各ポイント間の速度を 1 秒に設定しました。問題は、2 点間の距離が小さい場合、遅すぎるように見えることです。

私がやりたいことは、2 点間の距離を何らかの方法で計算し、0 から 1 秒の範囲で速度を出力して、短い距離と長い距離の速度が正しくなるようにすることです。

ヘルプやアドバイスをいただければ幸いです。

ありがとうございました、

eb_dev

4

3 に答える 3

1

距離を短くするための最小速度が必要だと思います。

const MIN_SPEED:Number = ???// adjust this value
var distance:Number = Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
var duration:Number = Math.min(1.0, distance / MIN_SPEED);

長距離1.0<距離/MIN_SPEEDの場合、持続時間は1.0[秒]
に設定されます。短距離1.0>距離/MIN_SPEEDの場合、持続時間はMIN_SPEEDで定義された速度で移動するように設定されます。

于 2010-11-08T15:07:15.663 に答える
1

Mattiが言ったことを2番目に言いますが、それはより速くすることができます-約48から64ビットのメモリのコストで(WHOAHとても!!! ...)

var dX:Number = x1 - x2;
var dY:Number = y1 - y2;
var dist:Number = Math.sqrt(dX * dX + dY * dY);
var animTime = dist / state.stageWidth;

そして、eb Devの要求に応じて、平方根にはピタゴラス定理の一部があることを説明します。

a^2 + b^2 = c^2

X軸とY軸の線は、直角三角形の2本の脚と見なすことができるため、斜辺は2つの特定の点(必要)間の距離になります。

まず、ポイント(x1-x2、y1-y2)を減算します。まだ2つのポイントがありますが、三角形の直角部分は0、0、つまりX軸とY軸が交差するポイントになります。これをピタゴラスの定理に適用できるようにするために、aとbのサイズを見てみましょう長さaは、0、0とポイント1の間の距離です。0、0を引くと、ポイント1だけが残ります。 -ただし、X軸上のどこかにあることがわかっています-したがって、そのYは0になります。長さは点1のX部分に等しい言えます。

bレッグとポイント2についても同じことが言えます。ただし、今回はY部分だけを取得します。

そして、cを計算するために、最初にabの2乗を合計します(a ^ 2 + b ^ 2)。これでc^2ができたので、c-斜辺を取得するために、その平方根(つまり、AS3.0のMath.sqrt())を計算します。

cは距離です。

これがこれを説明することを願っています。

于 2010-11-08T16:48:58.917 に答える
1

あなたがしたいことは、2 点間の距離を計算し、それに相対的な時間を持たせることです。関係をどの程度正確に定義するかによって異なります。物がステージの端から端まで移動する 1 秒間のアニメーションです。これがベースラインとなり、すべてのアニメーションはそれに関連します。

ステージ幅全体のアニメーションを 1 秒とすると、それより短いアニメーションはその 1 秒に関連しています。

dist = Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
animTime = dist / state.stageWidth;

更新: Math.sqrt は、ポイント間の差の平方根を取るだけです。実際の距離ではなく、ステージ サイズに対する距離のみに関心があるため、必ずしもこれを行う必要はありません。これが存在する理由は、距離を と同じスケールに戻すためstage.stageSizeです。はと座標(x1-x2)*(x1-x2)の間の距離を 2 乗していることに注意してください。に等しい。x1x2Math.pow(x1-x2,2)

于 2010-11-08T10:45:20.833 に答える