2

私が求めている効果が何であるかを誰かが理解してくれることを本当に願っています. キャラクターが一方向に滑っているゲームをプレイしたことがありますか?キャラクターの方向を変えようとしても、反対方向に滑り始める前に最初の方向に減速する必要があるため、すぐには変化しませんか? Flappy Bird のメーカーによる App Store 'Swing Copters' の新しいゲームは、まさに私が話している効果です。SpriteKit でこのエフェクトを作成するのを手伝ってくれませんか。すでにさまざまな力を適用してそれを達成しようとしましたが、正しく行っていないか、力では効果が得られません。

前もって感謝します!

4

1 に答える 1

0

アクセラレーション関連の作業を試してみたいと思うかもしれません。

地球の重力について考えてみましょう (a = 9.81 メートル/秒)。ボールを空にまっすぐ投げると、ボールは次の速度で始まります。たとえば、毎秒 5 メートル (正の速度) としましょう。しばらくすると、重力によってボールの速度が 0 に引き下げられるため、ボールはそれ以上高くなりません。この直後、重力によってボールが地面に落ちるまで引き下げられます。(負の速度)

ボールが上下ではなく左から右に動くゲームでこれについて話している場合は、このようなものを使用できます。ボールを投げる瞬間は、ゲーム内で方向転換のコマンドを送る瞬間です。ボールは以前の方向に進み続け、遅くなり、停止し、方向を変え、最終的には、方向を変える別のコマンドを送信するまで (または壁/地面にぶつかるまで) どんどん速くなります。その場合、使用したい加速度を逆にする必要があるため、すべてが逆に繰り返されます。

ボールが右に移動する場合は正の加速度、ボールが左に移動する場合は負の加速度です。

式として、次のようなものを使用できます

v = (int) (a * t + v0);
v0 = v;

v は次の速度、a は使用する加速度、t は経過時間、v0 は現在の速度です。t は、最後の方向転換からのナノ時間をカウントする必要があります。(int) は全体を整数にキャストするため、これを直接使用して画面上のボール/グラフィックを移動できます。

これを毎フレーム繰り返します。

あなたが使用できる方向転換のために

t = 0;
a = a * (-1);

t は再び 0 にする必要があります。そうしないと、バグが発生します。これがお役に立てば幸いです。

于 2014-10-10T11:28:32.550 に答える