我正在开发一款游戏,只是想在不同的计算机上测试它以检查分辨率是否正常以及所有这些但是注意到一个大问题,游戏由于某种原因以慢动作运行...不是很迟钝,但慢动作.. 我的游戏循环是暂时的:
while(gameisRunnin){
doStuff();
Thread.sleep(1000/60);
但是在测试之后,我已经尝试检查执行doStuff();
代码需要多长时间,并且我测试了它:
while(gameisRunnin){
long startT = System.currentTimeMillis();
doStuff();
long stopT = System.currentTimeMillis();
System.out.println(stopT-startT);
Thread.sleep(1000/60);
它给我的结果是0,在两台计算机上(在我正在开发的游戏中以完美的速度运行,而在PC上以慢动作运行... 我也用纳米时间测试了它,它在两个计算中也给了我50000-80000(结果几乎相同。 严重的是什么了?超人可以拯救我吗?
更新: 好吧,当我在另一台计算机上运行游戏而不是全屏时,它运行正常,但是当它在全屏时,它是慢动作 更新: 看起来我是这里的超级英雄,我已经将displaymode的刷新率设置为未知,我想这就是整个问题......
答案 0 :(得分:2)
您必须使用通常称为" delta time"的内容。基本上它意味着,您可以测量一次迭代游戏循环所需的时间,然后将此数字用于所有动作。
这是因为不同计算机上的FPS计数不同。您可以动态地定义速度并计算实际移动大小,而不是仅为恒定数量的像素移动对象。
简短的例子:
public void gameLoop() {
long initialTime = System.nanoTime();
game.redraw();
game.update(System.nanoTime() - initialTime);
}
// inside the class Game
public void update(long deltaTime) {
someObject.moveToRight(deltaTime * speed);
}
答案 1 :(得分:1)
答案是显示器不支持游戏的刷新率,将刷新率从60更改为DisplayMode.REFRESH_RATE_UNKNOWN
可以解决慢动作问题。
答案 2 :(得分:0)
阅读这篇文章:click here
另外,作为旁注,请使用 System.nanoTime(),因为System.getTimeMillis()不准确。