FPS:即帧 /秒(frames per second)的缩写,也称为帧速率。是指1秒钟时间里刷新的图片的帧数,也可以理解为图形处理器每秒钟能够刷新几次。如果具体到手机上就是指每秒钟能够播放(或者录制)多少格画面。同时越高的帧速率可以得到更流畅、更逼真的动画。每秒钟帧数(fps)越多,所显示的动作就会越流畅。
在绝大多数图形程序中(以游戏类为典型),执行效率都以FPS作为评估标准。
由于目前JAVA方面缺少相关用例,故完成功能如下图(在本机测试中,最大fps设定为500,实际达到FPS效率在IDE中280左右,单独运行380左右,受系统配置等因素影响):
代码如下:
FPS部分相关源码:
package org.test;<br />import java.text.DecimalFormat;<br />/**<br />* <p>Title: LoonFramework</p><br />* <p>Description:</p><br />* <p>Copyright: Copyright (c) 2007</p><br />* <p>Company: LoonFramework</p><br />* @author chenpeng <br />* @email:ceponline@yahoo.com.cn<br />* @version 0.1<br />*/<br />public class FPSListen {<br /> //设定动画的FPS桢数,此数值越高,动画速度越快。<br /> public static final int FPS = 500; <br /> // 换算为运行周期<br /> public static final long PERIOD = (long) (1.0 / FPS * 1000000000); // 单位: ns(纳秒)<br /> // FPS最大间隔时间,换算为1s = 10^9ns<br /> public static long FPS_MAX_INTERVAL = 1000000000L; // 单位: ns<br /> <br /> // 实际的FPS数值<br /> private double nowFPS = 0.0;<br /> <br /> // FPS累计用间距时间<br /> private long interval = 0L; // in ns<br /> private long time;<br /> //运行桢累计<br /> private long frameCount = 0;<br /> <br /> //格式化小数位数<br /> private DecimalFormat df = new DecimalFormat("0.0");<br /> //开启opengl<br /> public void opengl(){<br /> System.setProperty("sun.java2d.opengl", "True");<br /> System.setProperty("sun.java2d.translaccel", "True");<br /> }<br /> <br /> /** *//**<br /> * 制造FPS数据<br /> *<br /> */<br /> public void makeFPS() {<br /> frameCount++;<br /> interval += PERIOD;<br /> //当实际间隔符合时间时。<br /> if (interval >= FPS_MAX_INTERVAL) {<br /> //nanoTime()返回最准确的可用系统计时器的当前值,以毫微秒为单位<br /> long timeNow = System.nanoTime();<br /> // 获得到目前为止的时间距离<br /> long realTime = timeNow - time; // 单位: ns<br /> //换算为实际的fps数值<br /> nowFPS = ((double) frameCount / realTime) * FPS_MAX_INTERVAL;<br /> //变更数值<br /> frameCount = 0L;<br /> interval = 0L;<br /> time = timeNow;<br /> }<br /> }<br /> public long getFrameCount() {<br /> return frameCount;<br /> }<br /> public void setFrameCount(long frameCount) {<br /> this.frameCount = frameCount;<br /> }<br /> public long getInterval() {<br /> return interval;<br /> }<br /> public void setInterval(long interval) {<br /> this.interval = interval;<br /> }<br /> public double getNowFPS() {<br /> return nowFPS;<br /> }<br /> public void setNowFPS(double nowFPS) {<br /> this.nowFPS = nowFPS;<br /> }<br /> public long getTime() {<br /> return time;<br /> }<br /> public void setTime(long time) {<br /> this.time = time;<br /> }<br /> public String getFPS(){<br /> return df.format(nowFPS);<br /> }<br />}
球体类相关代码:
package org.test;import java.awt.Color;import java.awt.Graphics;/** *//***Title: LoonFramework
*
Description:
*
Copyright: Copyright (c) 2007
*
Company: LoonFramework
* @author chenpeng * @email:ceponline@yahoo.com.cn* @version 0.1*/public class Ball { private static final int SIZE = 10; private int x, y; protected int vx, vy; public Ball(int x, int y, int vx, int vy) { this.x = x; this.y = y; this.vx = vx; this.vy = vy; } public void move() { x += vx; y += vy; if 现在睡觉的话,会做梦;而现在学习的话,会让梦实现。