より高速なコンピュータ上でより速く移動するレースカーゲーム、カー
-
18-09-2019 - |
質問
私はそれはそれを行うが、私は本当にそれを防ぐ方法の任意のアイデアを持っていない理由を理解しています。だから、シナリオは、私が事前に定義されたピクセルの特定により、車を移動するすべてのフレームです。何が起こるかというと、私が遅いか速いコンピュータに行くとき車が遅くなるか、より高速のいずれかに移動して...よく私は秒あたりの少ないフレーム以上を取得することです。私はそれを防ぐことができるか疑問に思いました。
私は任意のライブラリを使用して同じ問題を抱えているだろうと思われる...これはそのようにリアルタイムのものをやって初めてです。
解決
私はあなたの現在のコードは次のようになります何とか疑い
// to be called every frame
void OnEveryFrame()
{
MoveCar();
DrawCarToScreen();
}
しかし、それはこのようにする必要があります:
// to be called - for example - 50 times per second:
void OnEveryTimerEvent()
{
MoveCar();
}
// to be called every frame
void OnEveryFrame()
{
LockTimerEvents();
DrawCarToScreen();
UnlockAndProcessOutstandingTimerEvents();
}
もちろん、応じてタイマーイベントを設定する必要があります。
他のヒント
タイマーではなくフレームレートに応じて車を移動します。すなわち車モデルはディスプレイ表示とは無関係であるべきである。
あなたは、正確なタイマーとベクトル数学を使用することによってこの問題を解決することができます。
だから、議論のために、例えば、任意の時点で呼び出すことができ、あなたの描画コードを示唆することができます1秒離して又は離れて3秒離れ又は0.02秒。
40個のピクセル秒にかご移動速度を取る。
40ピクセル* -このため、それは移動すべき画素数が(LAST_FRAME_TIME TIME_NOW)です。
移動は「実」時間遅延によって制約されるべきである、すなわち、あなたの車はタイムスライスあたりのXピクセルの速度で移動します。
リアルタイムクロックを読んで、経過時間のために車に適切な距離を移動します。コンピュータがあまりにも遅いですが、CPUのスピードの車の速度が独立して作る場合、これはやや「ぎくしゃく」を見てます。
あなたは(60 FPSが最も一般的です)毎秒Xフレームにフレームレートをキャップする必要があります。これはSFMLを含むほとんどのマルチメディアフレームワーク、中に共通の特徴です。 SFMLのために私は、Window / RenderWindowの方法 SetFramerateLimit(unsigned int型に見てねリミット)するます。
あなたは車や図面を移動する前に、時間を節約する必要があります。
すべての計算の後、時間を節約できます。
Npixels /秒であなたの車を移動し、