//To Measure FPS
private long now;
private int framesCount = 0;
private int framesCountAvg=0;
private long framesTimer=0;
//Main Game Loop
while (isRunning)
{
//Record the time before update and draw
long beforeTime = System.nanoTime();
//... Update program & draw program...
// DRAW FPS:
now=System.currentTimeMillis();
gEngine.drawFPS(c, framesCountAvg);
framesCount++;
if(now-framesTimer>1000)
{
framesTimer=now;
framesCountAvg=framesCount;
framesCount=0;
}}
# 1 楼答案
虽然这个问题听起来有点模糊,但我还是会尽我所能回答它。因为最初的帖子可以追溯到2011年,所以OP很可能不会从我的回答中受益。不过,希望它能为后续的人提供更好的立足点(前两个答案似乎有点凌乱和简洁)
下面是我经常用来收集和显示各种Java GUI应用程序的帧速率的代码片段:
我的方法(与之前的解决方案相比)的明显优势是:
Graphics
或JLabel
之类的内容,就可以了李>javax.Swing.Timer
或线程一起使用-在试图评估其性能的计时器/线程上调用submitReading()
,同时从另一个计时器/线程运行getFrameRate()
以获得结果(例如,可以将其写入JLabel
、文件等)李>(注:请注意,使用Swing时,所有绘制操作都需要在事件调度器线程(EDT)上完成。因此,如果不使用
SwingUtilities.invokeLater(..)
等特殊命令,任何绘图工作都不应委托给其他(原始)线程希望这有帮助
# 2 楼答案
计算经过的时间,
1000/elapsedTime
将成为您的fps# 3 楼答案
这是我的代码。把它放在主程序循环中:
调用“gEngine.drawFPS”只是告诉我的主绘制方法在屏幕顶部包含fps(c是我的画布)——你可以使用类似的方法为“g”类提供正确的framesCountAvg数据来绘制