gpt4 book ai didi

Java 主游戏循环

转载 作者:搜寻专家 更新时间:2023-10-30 19:41:57 25 4
gpt4 key购买 nike

我正在写一个游戏循环,我在下面的例子中找到了代码here .我还研究了其他方法来进行游戏循环,例如来自 this article .不过,我无法让其中任何一个工作。所以我保留了第一个链接中的那个。

我想知道的:

  • 我编写游戏循环的方式是否适合这样做?
    • 有什么建议吗?
  • 我应该在我的游戏循环中使用 Thread.sleep(); 吗?

这是我当前的代码:

public void run(){
long lastLoopTime = System.nanoTime();
final int TARGET_FPS = 60;
final long OPTIMAL_TIME = 1000000000 / TARGET_FPS;
long lastFpsTime = 0;
while(true){
long now = System.nanoTime();
long updateLength = now - lastLoopTime;
lastLoopTime = now;
double delta = updateLength / ((double)OPTIMAL_TIME);

lastFpsTime += updateLength;
if(lastFpsTime >= 1000000000){
lastFpsTime = 0;
}

this.updateGame(delta);

this.repaint();

try{
Room.gameTime = (lastLoopTime - System.nanoTime() + OPTIMAL_TIME) / 1000000;
System.out.println(Room.gameTime);
Thread.sleep(Room.gameTime);
}catch(Exception e){
}
}

最佳答案

最终你会想要移动到像 LWJGL 这样的地方,但让我强调一下,请继续做你现在在这里做的事情。它将教您基础知识。

你的循环做得很好。看起来不错,让我提供一些建议:

  • 重绘不会立即渲染屏幕。它告诉 RepaintManager准备好后渲染。使用 无效 paintImmediately反而。 paintImmediately 将阻止执行,直到组件被重新绘制,以便您可以测量渲染时间。

  • Thread.sleep 通常有几毫秒的漂移。您应该使用它来防止您的循环使用过多的 CPU,但请确保您了解如果您 hibernate 10 毫秒,您可能会 hibernate 5 毫秒或者您可能会 hibernate 20 毫秒。

  • 最后:

    double delta = updateLength / ((double)OPTIMAL_TIME);

    如果 updateLength 小于 OPTIMAL_TIME,则不调用更新。换句话说,如果 delta 小于 1,则不更新。 This tutorial解释为什么比我做得更好。

关于Java 主游戏循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18283199/

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