Flash AS3- 0〜1の数として2つのXY座標の違いを表現する方法は?
-
29-09-2019 - |
質問
X、Yポイントのセットに沿ってMovieclipをアニメーション化するMovieclip Spawnerクラスとアニメータークラスを作成しました。 GreensockのTweenMaxを使用してアニメーションを達成し、各ポイントの間に速度を1秒に設定しました。問題は、2つのポイント間の距離が小さい場合、遅すぎるように見えることです。
私がやりたいのは、2つのポイント間の距離を計算し、0〜1秒の範囲で速度を出力することです。
助けやアドバイスは大歓迎です。
ありがとうございました、
EB_DEV
解決
私は何を二番目に マッティ 言ったが、それはより速く作ることができる - 約48〜64ビットのメモリのコスト(あまりにも多く!!! ...)
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になります。 a ポイント1のx部分に等しい。
同じことが起こります b 脚とポイント2。しかし、今回は、その一部を取得します。
計算します c, 、最初に第2の力を合計します a と b (a^2 + b^2)。私たちは今、c^2を持っているので、 c - 陽子腸皮、平方根(AS3.0のmath.sqrt())を計算します。
c 距離です。
これがこれを説明することを願っています。
他のヒント
最小速度を距離を短くしたいと思います。
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 [sec]に設定されます
小距離1.0>距離 / min_speedの場合、およびMin_Speedで定義されたある速度で持続時間が移動するように設定されます。
あなたがしたいことは、2つのポイント間の距離を計算し、それに関連する時間を持つことです。関係を正確に定義する方法は異なります。 1秒のアニメーションが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)
間の距離を二乗しています x1
と x2
座標、すなわち。に等しい Math.pow(x1-x2,2)
.