0

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

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++;
    }
4

2 回答 2

0

render该方法只跟踪它被调用的次数(即渲染的帧数)以及每秒一次输出其当前计数会容易得多。由于它是render一种方法,它似乎还负责在屏幕上的某个地方“渲染”计数器,除非它被记录到文件或文本控制台。

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

于 2013-10-16T19:11:42.347 回答
0

看起来他在 previousTime 变量中计算秒数。每滴答一秒,他都会在 unprocessedSeconds 上增加一秒。一旦 unprocessedSeconnds 达到 60,他就会添加 1000,因为它在 previousTime 上滴答一整秒。

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

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

于 2013-10-16T19:13:55.403 回答