如何在 Java 中设置最大 FPS



我正在制作一款 2D 游戏,我意识到 FPS 大约是 500,但它一直下降到 440,这会产生可怕的延迟峰值,所以我想设置一个最大 fps 来阻止延迟峰值,但我不知道该怎么做。游戏循环:

    public void run(){
    this.requestFocus();
    long lastTime = System.nanoTime();
    double amountOfTicks = 60.0;
    double ns = 1000000000/amountOfTicks;
    double delta = 0;
    long timer = System.currentTimeMillis();
    int frames = 0;
    while(running){
        long now = System.nanoTime();
        delta += (now - lastTime) / ns;
        lastTime = now;
        while(delta >= 1){
            tick();
            delta--;
        }
        if(running)
            render();
    frames++;
    if(System.currentTimeMillis() - timer > 1000){
        timer += 1000;
        System.out.println("FPS: " + frames);
        frames = 0;
        }
    }
    stop();
}

只需使用与控制即时报价数量相同的控制机制即可。试试这个,把你想要的最大FPS放在'amountOfRenders'变量中。

public void run(){
    this.requestFocus();
    long lastTime = System.nanoTime();
    double amountOfTicks = 60.0;
    double ns = 1000000000/amountOfTicks;
    double delta = 0;
    long timer = System.currentTimeMillis();
    int frames = 0;
    int ticks = 0;
    long renderLastTime=System.nanoTime();
    double amtOfRenders = 200.0;//MAX FPS
    double renderNs=1000000000/amtOfRenders;
    double renderDelta = 0;
    while(running){
        long now = System.nanoTime();
        delta += (now - lastTime) / ns;
        lastTime = now;
        while(delta >= 1){
            tick();
            ticks++;
            delta--;
        }
        now = System.nanoTime();
        renderDelta += (now - renderLastTime) / renderNs;
        renderLastTime = now;
        while(running && renderDelta >= 1){
            render();
            frames++;
            renderDelta--;
        }
        if(System.currentTimeMillis() - timer > 1000){
            timer += 1000;
            System.out.println("FPS: " + frames);
            System.out.println("Ticks per second: " + ticks);
            frames = 0;
            ticks = 0;
        }
    }
    stop();
}

最新更新