我正在嘗試SFML並創建經典遊戲Snake。在SFML中移動精靈的Prob看起來很遲鈍(因爲sf :: Clock)
我已經成功地讓蛇在一段時間後移動了一定數量的像素。問題是遊戲循環需要不同的時間來執行。所以,當我寫出來的differtime的一舉一動,它看起來像這樣:
- 時間: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,這樣蛇就可以在屏幕上平穩地運行。 這裏是我的代碼是在gameloop實現(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的) 不知道這是可以固定的,但我要走了無法解決的問題,如果任何人有一個想法,那麼這是偉大的。謝謝!
這聽起來像你正在尋找以等速移動精靈。這裏有一個相關的談話:http://en.sfml-dev.org/forums/index.php?topic=6284.0簡短的版本是,你應該使用你想要的速度計算蛇的位置乘以所花費的時間自上次更新以來。 –
我已閱讀過此內容,但我不認爲這是我需要的。相反,我每2秒移動蛇。我會在有空的時候看看你的帖子。 –