私は2Dゲームを書いていますが、カメラスペースに鳥がいます。飛ばしたいです。だから、私は3つの〜ランダムなポイントを生成します。1つ目は左上、2つ目は中下、3つ目は右上です。
その結果、180度回転した三角形になりました。
鳥をカーブのパスに沿って移動させるために、各フレーム(レンダリングループ)でデルタごとに増加するtパラメーターがあります。
問題は、異なる曲線では鳥の速度が異なることです。三角形が「幅広」(1)の場合は遅くなり、Y座標(2)で引き伸ばされた場合は、速度が非常に速くなります。
しかし、私は異なるカーブで速度を等しくしたいと思っています。論理的にはdelta
、各曲線の各フレームに追加されるものを変更する必要があります。
私はそれを次のように解決しようとしました:
2つのベクトルの長さを合計して曲線の〜長さを求めます:P1P2
とP2P3
。
フレームごとに1つの仮想メーターの速度を定義したよりも。少しの擬似コード:
float pixelsInMeter = 92.f; // One virtual meter equals to this number of pixels
float length = len(P1P2) + len(P2P3)
float speed = 0.0003f; // m/frame
// (length * speed) / etalon_length
float speedForTheCurve = toPixels( (toMeters(length) * speed) / 1.f);
// ...
// Each frame code:
t += speedForTheCurve;
Vector2 newPos = BezierQuadratic(t, P1, P2, P3);
しかし、とにかく鳥は異なる速度を持っています。どうしたの?あるいは、もっと良い方法があるかもしれません。