frameratetest.java
来自「java learn PPT java learn PPT java learn」· Java 代码 · 共 97 行
JAVA
97 行
import java.applet.*;
import java.awt.*;
public class FramerateTest extends Applet implements Runnable
{
// 动画线程
private Thread animation;
// 每一帧的最短毫秒数
private long framerate;
public void init()
{
setBackground(Color.BLACK);
animation = new Thread(this);
// 设置帧速为每秒60帧,(16.67 ms / frame)
framerate = 1000/60;
}
public void start()
{
// 开启动画线程
animation.start();
}
public void stop()
{
animation = null;
}
public void run()
{
// 帧开始的时间time the frame began
long frameStart;
// 这一秒的帧数
long frameCount = 0;
// 一帧消耗的时间
long elapsedTime;
// 多帧累计消耗的时间
long totalElapsedTime = 0;
// 实际计算出来的帧速
long reportedFramerate;
Thread t = Thread.currentThread();
while (t == animation)
{
// 保存开始时间
frameStart = System.currentTimeMillis();
// 绘制帧
repaint();
// 计算绘制帧所消耗的时间
elapsedTime = System.currentTimeMillis() - frameStart;
// 帧速同步
try
{
// 确保这一帧已经过去了framerate 毫秒
if(elapsedTime < framerate)
{
Thread.sleep(framerate - elapsedTime);
}
else
{
// 不要让垃圾收集器饿着
Thread.sleep(5);
}
}
catch(InterruptedException e)
{
break;
}
// 更新实际的帧速
++ frameCount;
totalElapsedTime += (System.currentTimeMillis() - frameStart);
if(totalElapsedTime > 1000)
{
reportedFramerate = (long)((double) frameCount / (double) totalElapsedTime * 1000.0);
// 在applet的状态栏中显示帧速
showStatus("fps: " + reportedFramerate);
frameCount = 0;
totalElapsedTime = 0;
}
}
} // run
} // FramerateTest
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?