java - 在 Java 游戏中计算 FPS

标签 java frame-rate

<分区>

昨天我写了一个线程来说明我的游戏循环是如何运行的(在 java 中)以及它是如何工作的。

我的游戏循环完全正常,我知道为什么,但现在我只是想知道如何计算 FPS(每秒帧数)并每秒打印出来。

我昨天收到了关于这件事的回复,但是他/她用文字解释了,我听不懂。

如果有人能帮助我(有代码示例?:D)那就太好了。

这是我的游戏循环:

        while (running) {

        start = System.nanoTime();

        update();
        draw();
        drawToScreen();

        elapsed = System.nanoTime() - start;

        wait = targetTime - elapsed / 1000000;
        if (wait < 0) {
            wait = 5;
        }

        try {
            Thread.sleep(wait);
        } catch (Exception e) {
            Game.logger.log("ERROR! Printing Stacktrace...");

            e.printStackTrace();
        }

    }

还有:

在我的 JFrame 中,每当我调用 setName(string) 时,它永远不会在框架上工作/更新 - 将我链接到一个线程?

最佳答案

最简单的方法是保存一个变量 whatTheLastTimeWas 并在你想检查帧速率的地方执行此操作:

double fps = 1000000.0 / (lastTime - (lastTime = System.nanoTime())); //This way, lastTime is assigned and used at the same time.

或者,您可以像这样制作一个 FPS 计数器:

class FPSCounter extends Thread{
    private long lastTime;
    private double fps; //could be int or long for integer values

    public void run(){
        while (true){//lazy me, add a condition for an finishable thread
            lastTime = System.nanoTime();
            try{
                Thread.sleep(1000); // longer than one frame
            }
            catch (InterruptedException e){

            }
            fps = 1000000000.0 / (System.nanoTime() - lastTime); //one second(nano) divided by amount of time it takes for one frame to finish
            lastTime = System.nanoTime();
        }
    }
    public double fps(){
        return fps;
    } 
}

然后在您的游戏中,有一个 FPSCounter 的实例,并在一帧完成时调用 nameOfInstance.interrupt();

关于java - 在 Java 游戏中计算 FPS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20769767/

相关文章:

java - java中RegularTimePeriod的创建或转换

java - 在原子变量上使用 volatile 原语有什么区别?

video - FFmpeg - 用帧率计算?

python - 如何在OpenCV-Python中使用优化处理器性能?

javascript - HTML5 Canvas 性能 - 每秒计算循环数/帧数

java - 控制另一个类中的对象

java - 如何记住之前保存的表单数据以供后续请求

c# - 用 C# 加密 AES 以匹配 Java 加密

javascript - 如何在 HTML-Canvas 上渲染光线转换的墙壁纹理

xml - 计算 Final Cut Pro X xml 序列持续时间