1

オブジェクトがベクトルに沿って移動し、最終的に目的地に到達して移動を停止するという、非常に具体的な質問があります。問題のオブジェクトは、「飛行」アニメーション シーケンス、「着陸」アニメーション シーケンス、および「アイドル」アニメーション シーケンスを持つアセットです。

オブジェクトは、ステージ上のランダムなポイントから一定の速度で直線に沿って移動する必要があります。オブジェクトは着地シーケンスに変わるエンドポイントから正確に 30 フレーム離れたときに緩和を開始します (これには 30 フレーム、または frameRate に基づいて 1 秒かかります)。着陸シーケンスが完了すると、イージングは​​ 0 に切り捨てられ、オブジェクトは移動を完了し、無期限に「アイドル」シーケンスに切り替わります。

私の問題を示すスクリーンショットを以下に示します。数学と着陸シーケンスをいつプレイするかが私に最も問題を与えているので、どんな助けも大歓迎です。飛行 -> 着陸 -> アイドリングのプロセスが非常にスムーズで自然になるようにしています。

ActionScript3 を使用していますが、SWF は 30 fps またはそれに近い速度で実行されています。

スクリーンショットの説明: http://i.stack.imgur.com/oWrEg.png

4

1 に答える 1

1

Tweenlite ライブラリを使用することをお勧めします。

ここにいくつかの疑似コードがあります:

// determine x,y landing location
// calculate the angle between ship's x,y & landing location.
// calculate the x,y location along that angle that the landing animation should begin
// Tween from ship's x,y to the x,y where landing sequence should begin
    // set the onComplete parameter to call the function that triggers the landing sequence
// Tween from ship's current location to the landing location
    // set onComplete parameter to call function that sets ship to idle animation

Tweenlite を使用する場合、これは tween を設定する方法の例です:

Tweenlite.to(ship, duration, {x:targetX, y:targetY, onComplete:startLandingSequence});

-- 期間は、船が現在の場所から着陸シーケンスを開始する場所に到達するまでにかかる時間です。

このような目的でトゥイーンを使用する場合、船の速度に基づいて、船が特定の場所に到達するまでにかかる時間を計算する必要があります。その値は、トゥイーンのデュレーションとして渡すものです。

duration = distance / speedInPixelsPerSecond;

コメントで尋ねたベクトルの計算に関しては、ベクトルに関する優れたチュートリアルを次に示します。

http://www.tonypa.pri.ee/vectors/as3/start.html

于 2013-04-10T21:31:14.490 に答える