gpt4 book ai didi

Java currentTimeMillis 返回负值)

转载 作者:行者123 更新时间:2023-12-02 13:25:57 26 4
gpt4 key购买 nike

我正在用 Java 开发一个简单的 2D 游戏,一切正常。为了找到正确的 FPS 刷新/重绘/更新,我使用 currentTimeMillis 来查找差异。

问题是currentTimeMillis有时会返回负值,Thread.sleep会抛出异常(java.lang.IllegalArgumentException: timeout value is negative)

我所做的就是在游戏中放置一段时间,当 currentTimeMillis <= -1 时再次检查直到结束,然后 sleep 。

代码示例:

private void gameLoop(){
// Find FPS
long FPS = 40;
long beginTime = System.currentTimeMillis();
while(beginTime < -1){
beginTime = System.currentTimeMillis();
}
while(!done){
// Sleep
try{
beginTime += FPS;
long currTime = System.currentTimeMillis();
while(currTime < -1){
currTime = System.currentTimeMillis();
}
difference = (beginTime - currTime);
// Should be (currTime - beginTime)

Thread.sleep(difference);
}catch (Exception e){
e.printStackTrace();
}
// RENDER GAME
renderGame();
}
JOptionPane.showMessageDialog(null, "Game Over\nYou Died.");
System.exit(0);
}// end gameLoop()

当游戏开始时,这工作正常,但有时我仍然会遇到异常。有没有更好的办法?我仍然认为它返回负值很奇怪。

最佳答案

真正的问题不是 beginTime-currTime 为负数吗?

difference = (beginTime - currTime);
Thread.sleep(difference);

我注意到您将 FPS (40) 添加到 beginTime。但如果 currentTime 大于 beginTime+FPS,就会出现问题。

如果您想定期安排一些事情(我认为您就是这样),请查看 Timer ,这将使您能够更简单/可靠地完成此操作。

关于Java currentTimeMillis 返回负值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1199584/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com