为什么要在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++;
}
# 1 楼答案
看起来他在计算前一个时间变量中的秒数。每一个滴答声,他都会在未处理的秒数上加上一秒。一旦未处理的秒数达到60,他就加上1000,因为它比前一次快了整整一秒
另一种方法是,每隔60次在勾号部分添加一秒钟。显然,他希望渲染每秒进行60次
我以前见过这个额外的render(),因为他们试图做一个“穷人”版本的时间同步
# 2 楼答案
对于
render
方法来说,只跟踪调用它的次数(即渲染的帧数)并每秒输出一次当前计数要容易得多。因为它是render
方法,所以它似乎还负责在屏幕上的某个地方“呈现”计数器,除非它被记录到文件或文本控制台在输出计数的同时,也将其重置为零,然后再次开始计数。FPS计数器并没有那么复杂,也不需要除法或滴答计数之类的。这只是一个奇怪的计数(通常)每秒在屏幕上更新一次