当前位置: 首页 > 面试题库 >

Java主游戏循环

鲁博雅
2023-03-14
问题内容

我写一个游戏循环,我发现在例如下面的代码在这里。我还研究了进行游戏循环的其他方法,例如本文。但是我无法让这些工作。因此,我保留了第一个链接中的那个。

我想知道的是:

  • 我编写游戏循环的方式是否是实现此目标的好方法?
    • 有什么建议?
  • 我应该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准备就绪时进行渲染。立即使用 invalidate paint代替。paintImmediately将阻塞执行,直到重新绘制组件为止,以便您可以测量渲染时间。

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

  • 最后:

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

如果updateLength小于OPTIMAL_TIME,请不要调用更新。换句话说,如果增量小于1,请不要更新。本教程说明了为什么比我能做到的更好。



 类似资料:
  • 包含在程序启动时启动的线程。这个线程包含一个循环,每40毫秒更新一次游戏并重新绘制()board。 备选办法B: 板创建一个摆动计时器。这个计时器的动作监听器是板本身。actionPerformed()方法每40毫秒运行一次,并更新game+repaints Board()。 谢谢

  • 本食谱演示了使用组合流来创建游戏循环的一种方式。本食谱旨在突出如何用响应式的方式来重新思考现有问题。在这个示例中,我们将提供整体循环以及自上帧以来的增量时间。与此相结合的是用户输入流,以及当前的游戏状态,我们可以用它来更新我们的对象,并根据每帧的发出来将其渲染到屏幕上。 示例代码 ( StackBlitz ) import { BehaviorSubject, Observable, of, fr

  • 我对我正在写的一个介于两者之间的骰子游戏有一个问题。我之前有另一个问题被回答了,但我仍然有一个问题。(请记住,我对一般编程非常陌生) 甚至-史蒂文!高还是低[hl]?h 模具3:9 *你赢了!* 任何关于我需要改变什么/改变它的任何帮助都将非常感谢!提前谢了。

  • 每个pyplay都有一个游戏循环,看起来像这样: 根据的api: 返回自调用pygame.init()以来的毫秒数。在pyplay被初始化之前,这将永远是0。 但是: 此方法应每帧调用一次。它会计算出有多少。自上次调用以来已过毫秒。 如果您传递可选的framerate参数,函数将延迟以使游戏运行速度低于给定的每秒滴答数。这可以用来帮助限制游戏的运行速度。通过呼叫时钟。每帧勾选(40)一次,程序的运

  • 问题内容: 我正在用Java创建我的第一个游戏。游戏是大富翁。我在如何设计游戏以模拟其基于回合的结构(管理玩家回合)方面感到困惑。我想允许一个人控制和一个或多个AI控制的玩家玩游戏。 我的具体问题是,我不知道是否实施游戏循环,即可以管理玩家和与大富翁游戏直接相关的变量的循环(例如,提示每个玩家轮到他们,增加回合到下一个玩家的回合,或依次让每个玩家掷骰子)。我指的不是“游戏循环”这个词的更底层含义,

  • 所以我为我的课做了一个抽动练习作业。我已经成功地创建了一个简单的Tic Tac Toe程序,但不知何故,检查绘制的方法有时并不正确。如果所有东西都填满了,但没有赢家,那就是平局。但如果除第0行第1列外,其他所有内容都已填满,则即使该框仍为空白,它仍将显示“Draw”。如果你不明白我的意思,就试着把所有的东西都填满,但不是赢,即使最后一个框没有填满,它也会说“平局”。我在代码中做错了什么????驱动