java - 游戏循环性能问题

标签 java game-loop

我正在用 Java 制作炸弹人游戏,该游戏似乎会减慢 PC 的速度,导致处理器和 CPU 过载。我在另一个游戏中使用了该循环,它运行良好,没有造成任何性能问题。然而我确实注意到,简单地注释掉 gameloop() 会导致重大的性能问题

我正在使用的游戏循环:

public void start() {
    window.setVisible(true);
    running = true;
    int fps = 60;
    double timePerTick = 1e9 / fps;
    double delta = 0;
    long now;
    long lastTime = System.nanoTime();

    while (running) {
        now = System.nanoTime();
        delta += (now - lastTime) / timePerTick;
        lastTime = now;
        if (delta >= 1) {
            gameLoop(); /* commenting this out will cause major performance
                         * problem to the PC */
            delta--;
        }
    }
}

@Override
public void gameLoop() {
    if(!gameover){
        run();
        gui.repaint();
    }
}

此循环是否存在可能导致问题的问题,或者是否有更好的方法可以减少性能问题

[编辑] 我更改了循环以使用计时器执行类似的任务,它工作正常并且不会导致任何性能问题,此方法仍然有问题(长期问题)?

public void start(int fps){
   window.setVisible(true);
   running = true;
   gameTimer.scheduleAtFixedRate(new GameTimer(), 0, 1000/fps);
}

private class GameTimer extends TimerTask{

   @Override
   public void run(){
      gameLoop();
   }
}

最佳答案

您正在进行无限循环,没有任何暂停,这会消耗 100% 的 CPU,在您的情况下,根据您的需要,您应该定义帧速率并相应地设置 sleep 时间长度,如下所示:

    run();
    gui.repaint();
    // Make the current thread sleeps 1 000 milliseconds which means 1 frame per sec
    Thread.sleep(1000L);

关于java - 游戏循环性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37467336/

相关文章:

Android eglSwapBuffers - 手动控制? (安卓)

java - 在 Java 游戏中渲染比更新更快有什么好处?

java - 事件在 Java Swing 中是如何工作的?

java - 每次调用方法时如何在真假之间进行 boolean 变量切换?

java - 无法使用反射调用 main 方法 - IllegalArgumentException : argument type mismatch

java - 对变量进行排名并显示其名称

android - 我是否需要每帧都在 Canvas 上重绘所有对象?

java - 回合制游戏的游戏循环

客户端-服务器游戏算法

java - 卡在一个带有随机数据轴的简单快速排序实现中