私は現在、C++で物理エンジンを作成する過程で、コンピュータゲームプログラミングを大学に行っています。可変タイムステップを導入する際のトラブル
私はそれが
私の問題をステッピング我々は時間になるだろう現在の深さに適しているとして、不正確にもかかわらず、のGetTickCount()メソッド経由でタイムステップを導入するように求めてきた今、私が持っているということです導入されたタイムステップベースのムーブメントでは、更新機能の2つの異なるオーバーライドによってスクリーンに描画されたオブジェクトは機能していないようです。
コード内にブレークポイントを追加することで、mElapsedTimeが値を渡すように見えないように見え、私は困惑しています。
申し訳ありませんが、この記事があまりにも漠然としていたり、トピックから外れていたりすると、できるだけ多くの文脈を提供しようとしました。これが私の最初の投稿です。粒子クラス(例えばpos.x =速度のアップデートでより容易な乗算にfloat型のmElapsed時間、:
編集(frameStartTimeパラメータは、ちょうどフレームが更新され、描かれる前に、ダニ・カウントを取ります)。 x * timeStep)これが符号なしlongからfloatへのキャストの理由です。それはまだ冗長ですか?私が思う
void Simulation::gameLoopDelay(DWORD frameStartTime)
{
DWORD presetFrameInterval = 16;
DWORD frameProcessingTime = GetTickCount() - frameStartTime;
if (frameProcessingTime < presetFrameInterval)
{
Sleep(presetFrameInterval - frameProcessingTime);
}
mElapsedTime = (float)frameProcessingTime/1000.0f;
}
良い最初の質問です。あなたの 'presetFrameInterval'は定数でなければならないことと、最後の行の' float'へのキャストは冗長であるということです。 'mElapsedTime'は' float'ですか?関連するコードを取って完全な関連コードだけを使って完全なサンプルに凝縮する方法はありますか? – chris
あなた自身で問題をデバッグしようとしているための名誉です。しかし、このコードスニペットだけでは、私たちがあなたに伝えることはあまりありません。ここで明らかに間違ったことはありません。 –
私が潜在的に間違っているのは、スリープ後の経過時間がSleep()に渡された要求インターバルまで正確であるという仮定です。それは確かにそうでない*。睡眠から出た後にGetTickCount()を再設定せずにどれくらいの時間を過ごしたかは分かりません。 (そして質問のための小道具; **大半の最初の質問よりも遠すぎる**最初の質問ではなくても)あなたは分析して、最初に助けようとしました。 – WhozCraig