有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

为什么要在FPS(每秒帧数)跟踪器中添加时间?(爪哇)

我有人帮我制作了FPS跟踪器,但我不明白为什么我必须在打印FPS后添加previousTime += 1000;。如果有人知道,告诉我。如果你知道他为什么添加了两次渲染,请解释。这是我的代码:

public void run()
{
    int frames = 0;
    double unprocessedSeconds = 0;
    long previousTime = System.nanoTime();
    double secondsPerTick = 1 / 60.0;
    int tickCount = 0;
    boolean ticked = false;
    while(running)
    {
        //check ticker code
        long currentTime = System.nanoTime();
        long passedTime = currentTime - previousTime;
        previousTime = currentTime;
        unprocessedSeconds = passedTime / 1000000000.0;
        while(unprocessedSeconds > secondsPerTick)
        {
            tick();
            unprocessedSeconds -= secondsPerTick;
            ticked = true;
            tickCount++;
            if(tickCount % 60 == 0)
            {
                //System.out.println(frames + " fps");
                previousTime += 1000;
                fps = frames;
                frames = 0;
            }
        }
        if(ticked)
        {
            render();
            frames++;
        }
        render();
        frames++;
    }

共 (2) 个答案

  1. # 1 楼答案

    看起来他在计算前一个时间变量中的秒数。每一个滴答声,他都会在未处理的秒数上加上一秒。一旦未处理的秒数达到60,他就加上1000,因为它比前一次快了整整一秒

    另一种方法是,每隔60次在勾号部分添加一秒钟。显然,他希望渲染每秒进行60次

    我以前见过这个额外的render(),因为他们试图做一个“穷人”版本的时间同步

  2. # 2 楼答案

    对于render方法来说,只跟踪调用它的次数(即渲染的帧数)并每秒输出一次当前计数要容易得多。因为它是render方法,所以它似乎还负责在屏幕上的某个地方“呈现”计数器,除非它被记录到文件或文本控制台

    在输出计数的同时,也将其重置为零,然后再次开始计数。FPS计数器并没有那么复杂,也不需要除法或滴答计数之类的。这只是一个奇怪的计数(通常)每秒在屏幕上更新一次