この問題についてあなたの提案をしたい...
簡単にするために、x 軸のみを考えます。
位置 10 にあるオブジェクトをイメージし、その幅も 10 単位で、毎秒 100 単位で前進します。フレームが少ないため、更新ごとに 80 単位移動する必要があります。
最初の update が呼び出された後、その位置は 90 になり、位置 120 に同じサイズの別のオブジェクトがあります。
次の更新では、オブジェクトを位置 170 に移動します。衝突検出を実装する必要があることを考慮して、更新の前後に衝突を計算しますが、どれも機能しません。
ここで簡単な質問が来ます...
この場合どうすればいいですか?
次のようにします。
Position start = destinationPos - currentPos;
for (int i; i < start; i++)
if (IsColliding(movingObj.Position + i, staticObj))
//do the colliding stuff here
私はこの解決策が好きではありません。この場合は問題ないかもしれませんが、x、y、z と多くの移動オブジェクトがある場合はどうでしょうか?
私が良いと思った別の解決策は、信頼できるかどうかはわかりませんが、このすべての計算をループで実行する別のスレッドを用意することです。
このスレッドは無限ループのようなものになり、反復ごとelapsedTime
に非常に小さいと思われるものを計算し、動き続けて衝突を計算し、はるかに遅いレンダリングスレッドが現在の状態を取得しますオブジェクトの、それをレンダリングするだけです。
どう思いますか?