Java 创建游戏循环(游戏更新)

Java creating game loop (game update)

在我的 2D 游戏中,我不确定我的 FPS 和我的游戏帧更新方法。当我想要它打印出来,检查它是否在控制台中工作时,它从不写任何东西。我错过了什么吗?

public class Main extends JFrame implements Runnable{

private static final long serialVersionUID = 1L;

static boolean running = true;

/* My game fps */
public void run() {

    int FRAMES_PER_SECOND = 25;
    int SKIP_TICKS = 1000 / FRAMES_PER_SECOND;
    long next_game_tick = System.currentTimeMillis();
    long sleep_time = 0;

    while(running){

        updateGame();
        System.out.println("game updated")
        next_game_tick = SKIP_TICKS;
        sleep_time = next_game_tick - System.currentTimeMillis();

        if(sleep_time > 0){

            try {

                Thread.sleep(sleep_time);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

public static void main(String[] args){

    platform g = new platform();
    g.setVisible(true);
    g.setSize(900, 900);
    g.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    g.setResizable(false);

    (new Thread(new Main())).start();
}   

private void updateGame() {

    /*(e.g)all game code*/
}

}

我的帖子 运行 正确吗?

您可以使用方法 ScheduledExecutorService.scheduleAtFixedRate():

public class GameLoop {
    private static final int FPS = 60;

    public static void main(String[] args) {
        new GameLoop().startGame();
    }

    private void startGame() {
        ScheduledExecutorService executor = Executors
                .newSingleThreadScheduledExecutor();
        executor.scheduleAtFixedRate(new Runnable() {
            @Override
            public void run() {
                updateGame();
            }
        }, 0, 1000 / FPS, TimeUnit.MILLISECONDS);
    }

    private void updateGame() {
        System.out.println("game updated");
        // the game code
    }
}

这每秒调用方法 updateGame 60 次。与方法 ScheduledExecutorService.scheduleAtFixedDelay() 不同,此方法试图跟上。因此,如果一个游戏 tick 花费的时间足以延迟下一个游戏 tick,则执行程序服务将在计算下一个睡眠持续时间时考虑这一点。