私は SFML を試しており、古典的なゲーム Snake を作成しています。
一定時間後にヘビを一定量のピクセルだけ動かすことに成功しました。問題は、ゲームループの実行に異なる時間がかかることです。したがって、すべての動きの差分時間を書き出すと、次のようになります。
- 時間: 0.273553
- 時間: 0.259873
- 時間: 0.260135
- 時間: 0.396735
- 時間: 0.258397
- 時間: 0.262811
- 時間: 0.259681
- 時間: 0.257136
- 時間: 0.266248
- 時間: 0.412772
- 時間: 0.260008
0.39 と 0.41 のバンプは良くありません。ヘビの動きが遅くなることがあり、見栄えがよくありません。
スネークが画面上でスムーズに動作するように、時間は常に 0.25 にする必要があります。ゲームループに実装されている私のコードは次のとおりです (snake.getSpeed() 関数は 4 を返します)。
if(_clock.GetElapsedTime() > (1 / snake.getSpeed())){
std::cout << "Time: " << _clock.GetElapsedTime() << std::endl;
snake.changeDir(keyDown); //Change direction
snake.move(); //Move the snake
_clock.Reset();
}
プロセッサを遅くするだけですか、それともコードを改善する方法について別のアイデアを持っている人はいますか?
編集:上記を無視してください。リアルタイム バンパーは、GetEvent 関数のようです。理由はわかりませんが、実行に 0 秒から 0.2 秒かかります。ここに私のテストコードがあります:
//This is just i bit of code, therefore there's no ending brackets ;)
_clock.Reset();
while(_mainWindow.GetEvent(currentEvent)) {
std::cout << _clock.GetElapsedTime() << std::endl; //cout the elapsed time for GetEvent
(_mainWindow は sf::RenderWindow です) これを修正できるかどうかはわかりませんが、質問は未回答のままにしておきます。ありがとう!