我正在尝试 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)不知道这是否可以解决,但我没有回答这个问题,如果有人有想法,那就太好了。谢谢!