OpenGL GLUTコードを使用してゲームをプログラミングしています。ゲームのメインループの各繰り返しで消費される時間を測定するゲーム開発技術を適用しています。前回の更新に比例してゲームシーンが更新されます。これを達成するために、私はループの始めにこれを持っています:C++時間の計測が遅すぎる
void logicLoop() {
float finalTime = (float) clock()/CLOCKS_PER_SEC;
float deltaTime = finalTime - initialTime;
initialTime = finalTime;
...
// Here I move things using deltaTime value
...
}
私はゲームに弾丸を追加したときに問題が発生しました。 2秒間に弾丸がターゲットに当たっていない場合は、それを破壊する必要があります。その後、私がやったことは一瞬への参照を保持するために弾丸が、このように作成した:
class Bullet: public GameObject {
float birthday;
public:
Bullet() {
...
// Some initialization staff
...
birthday = (float) clock()/CLOCKS_PER_SEC;
}
float getBirthday() { return birthday; }
}
そして私はちょうどfinalTimeとdeltaTime測定を超えてロジックにこれを追加しました:
if (bullet != NULL) {
if (finalTime - bullet->getBirthday() > 2) {
world.remove(bullet);
bullet = NULL;
}
}
それは素晴らしそうに見えましたが、コードを実行すると、弾丸はあまりにも多くの時間を生かしています。問題を探して、私は(finalTime - bullet-> getBirthday())の値を表示し、秒単位で測定された時間ではないように、実際には非常に遅くなるのを見ました。
問題はどこですか?しかし、結果は数秒で終わるので、弾丸は2秒で取り除かれます。
わからないがここで起こっていただきましたが、あなたがC++ 11を持っている場合は、使用してみてください[ ''](http://en.cppreference.com/w/cpp/header/chrono)および保存することができます'std :: chrono :: time_point'を追加しました。 –
NathanOliver
なぜ 'glutGet(GLUT_ELAPSED_TIME)'を使わないのですか? – genpfault
@genpfault:おそらく明らかであるようにも見えますが、ドキュメンテーションには言いませんが、それは壁の時間だよね? –