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

时间:2013-10-16 19:04:45

标签: java frame-rate

我帮助制​​作了我的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 个答案:

答案 0 :(得分:0)

render方法只需跟踪调用的次数,即渲染的帧数,每秒输出一次当前计数,就会轻松得多。由于它是render方法,它似乎也有可能负责在屏幕上“呈现”计数器,除非将其记录到文件或文本控制台。

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

答案 1 :(得分:0)

看起来他正在计算previousTime变量中的秒数。每次滴答都会将部分秒加到unprocessedSeconds。一旦unprocessedSeconnds达到60,他就会增加1000,因为它在前一个时间点上整整一秒。

另一种方式,通过刻度线部分每60次添加一次。显然他希望渲染每秒发生60次。

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