我帮助制作了我的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++;
}
答案 0 :(得分:0)
render
方法只需跟踪调用的次数,即渲染的帧数,每秒输出一次当前计数,就会轻松得多。由于它是render
方法,它似乎也有可能负责在屏幕上“呈现”计数器,除非将其记录到文件或文本控制台。
在输出计数的同时,也将其重置为零,然后再次开始计数。 FPS计数器并不那么复杂,也不需要除法或计数器等等。这只是一个奇怪的计数(通常)每秒在屏幕上更新一次。
答案 1 :(得分:0)
看起来他正在计算previousTime变量中的秒数。每次滴答都会将部分秒加到unprocessedSeconds。一旦unprocessedSeconnds达到60,他就会增加1000,因为它在前一个时间点上整整一秒。
另一种方式,通过刻度线部分每60次添加一次。显然他希望渲染每秒发生60次。
我之前看过额外的render(),因为他们试图做一个“穷人”版本的同步到时间。