FPS:即帧 /秒(frames per second)的缩写,也称为帧速率。是指1秒钟时间里刷新的图片的帧数,也可以理解为图形处理器每秒钟能够刷新几次。如果具体到手机上就是指每秒钟能够 播放(或者录制)多少格画面。同时越高的帧速率可以得到更流畅、更逼真的动画。每秒钟帧数(fps)越多,所显示的动作就会越流畅。
在绝大多数图形程序中(以游戏类为典型),执行效率都以FPS作为评估标准。
由于目前JAVA方面缺少相关用例,故完成功能如下图(在本机测试中,最大fps设定为500,实际达到FPS效率在IDE中280左右,单独运行380左右,受系统配置等因素影响):
代码如下:
(请变更文件后缀为jar)
FPS相关操作代码如下:
packageorg.test;
importjava.text.DecimalFormat;
/***//**
*<p>Title:LoonFramework</p>
*<p>Description:</p>
*<p>Copyright:Copyright(c)2007</p>
*<p>Company:LoonFramework</p>
*@authorchenpeng
*@email:ceponline@yahoo.com.cn
*@version0.1
*/
publicclassFPSListen...{
//设定动画的FPS桢数,此数值越高,动画速度越快。
publicstaticfinalintFPS=500;
//换算为运行周期
publicstaticfinallongPERIOD=(long)(1.0/FPS*1000000000);//单位:ns(纳秒)
//FPS最大间隔时间,换算为1s=10^9ns
publicstaticlongFPS_MAX_INTERVAL=1000000000L;//单位:ns
//实际的FPS数值
privatedoublenowFPS=0.0;
//FPS累计用间距时间
privatelonginterval=0L;//inns
privatelongtime;
//运行桢累计
privatelongframeCount=0;
//格式化小数位数
privateDecimalFormatdf=newDecimalFormat("0.0");
//开启opengl
publicvoidopengl()...{
System.setProperty("sun.java2d.opengl","True");
System.setProperty("sun.java2d.translaccel","True");
}
/***//**
*制造FPS数据
*
*/
publicvoidmakeFPS()...{
frameCount++;
interval+=PERIOD;
//当实际间隔符合时间时。
if(interval>=FPS_MAX_INTERVAL)...{
//nanoTime()返回最准确的可用系统计时器的当前值,以毫微秒为单位
longtimeNow=System.nanoTime();
//获得到目前为止的时间距离
longrealTime=timeNow-time;//单位:ns
//换算为实际的fps数值
nowFPS=((double)frameCount/realTime)*FPS_MAX_INTERVAL;
//变更数值
frameCount=0L;
interval=0L;
time=timeNow;
}
}
publiclonggetFrameCount()...{
returnframeCount;
}
publicvoidsetFrameCount(longframeCount)...{
this.frameCount=frameCount;
}
publiclonggetInterval()...{
returninterval;
}
publicvoidsetInterval(longinterval)...{
this.interval=interval;
}
publicdoublegetNowFPS()...{
returnnowFPS;
}
publicvoidsetNowFPS(doublenowFPS)...{
this.nowFPS=nowFPS;
}
publiclonggetTime()...{
returntime;
}
publicvoidsetTime(longtime)...{
this.time=time;
}
publicStringgetFPS()...{
returndf.format(nowFPS);
}
}
球体类代码如下:
packageorg.test;
importjava.awt.Color;
importjava.awt.Graphics;
/***//**
*<p>Title:LoonFramework</p>
*<p>Description:</p>
*<p>Copyright:Copyright(c)2007</p>
*<p>Company:LoonFramework</p>
*@authorchenpeng
*@email:ceponline@yahoo.com.cn
*@version0.1
*/
publicclassBall...{
privatestaticfinalintSIZE=10;
privateintx,y;
protectedintvx,vy;
publicBall(intx,inty,intvx,intvy)...{
this.x=x;
this.y=y;
this.vx=vx;
this.vy=vy;
}
publicvoidmove()...{
x+=vx;
y+=vy;
if(x<0||x>BallPanel.WIDTH-SIZE)...{
vx=-vx;
}
if(y<0||y>BallPanel.HEIGHT-SIZE)...{
vy=-vy;
}
}
publicvoiddraw(Graphicsg)...{
g.setColor(Color.RED);
g.fillOval(x,y,SIZE,SIZE);
}
}
FPS及球体处理用代码如下:
packageorg.test;
importjava.awt.Color;
importjava.awt.Dimension;
importjava.awt.Frame;
importjava.awt.Graphics;
importjava.awt.Image;
importjava.awt.Panel;
importjava.awt.event.WindowAdapter;
importjava.awt.event.WindowEvent;
importjava.awt.image.BufferedImage;
importjava.util.Random;
/***//**
*<p>
*Title:LoonFramework
*</p>
*<p>
*Description:以JAVA获取FPS用演示程序及随机生成乱数球体。(更优化代码内置于loonframework-game框架中)
*</p>
*<p>
*Copyright:Copyright(c)2007
*</p>
*<p>
*Company:LoonFramework
*</p>
*
*@authorchenpeng
*@email:ceponline@yahoo.com.cn
*@version0.1
*/
publicclassBallPanelextendsPanelimplementsRunnable...{
/***//**
*
*/
privatestaticfinallongserialVersionUID=1L;
publicstaticfinalintWIDTH=360;
publicstaticfinalintHEIGHT=360;
//设定最大球体数量
privatestaticfinalintNUM_BALLS=50;
//定义球体数组
privateBall[]ball;
//运行状态
privatevolatilebooleanrunning=false;
privateThreadgameLoop;
//缓存用图形
privateGraphicsbg;
privateImagescreen=null;
//生成随机数
privateRandomrand;
//fps监听
privateFPSListenfps=null;
publicBallPanel()...{
setPreferredSize(newDimension(WIDTH,HEIGHT));
screen=newBufferedImage(WIDTH,HEIGHT,1);
bg=screen.getGraphics();
fps=newFPSListen();
//fps.opengl();
//以当前毫秒生成随机数
rand=newRandom(System.currentTimeMillis());
ball=newBall[NUM_BALLS];
//初始化球体参数
for(inti=0;i<NUM_BALLS;i++)...{
intx=rand.nextInt(WIDTH);
inty=rand.nextInt(HEIGHT);
intvx=rand.nextInt(10);
intvy=rand.nextInt(10);
ball[i]=newBall(x,y,vx,vy);
}
}
//加入Notify
publicvoidaddNotify()...{
super.addNotify();
//判断循环条件是否成立
if(gameLoop==null||!running)...{
gameLoop=newThread(this);
gameLoop.start();
}
}
/***//**
*进行线程运作。
*/
publicvoidrun()...{
longbeforeTime,afterTime,timeDiff,sleepTime;
longoverSleepTime=0L;
intnoDelays=0;
//获得精确纳秒时间
beforeTime=System.nanoTime();
fps.setTime(beforeTime);
running=true;
while(running)...{
gameUpdate();
repaint();
afterTime=System.nanoTime();
timeDiff=afterTime-beforeTime;
//换算间隔时间
sleepTime=(FPSListen.PERIOD-timeDiff)-overSleepTime;
if(sleepTime>0)...{
//制造延迟
try...{
Thread.sleep(sleepTime/1000000L);//nano->ms
}catch(InterruptedExceptione)...{
}
//获得延迟时间
overSleepTime=(System.nanoTime()-afterTime)-sleepTime;
}else...{
//重新计算
overSleepTime=0L;
//判断noDelays值
if(++noDelays>=16)...{
Thread.yield();//令线程让步
noDelays=0;
}
}
//重新获得beforeTime
beforeTime=System.nanoTime();
//制造FPS结果
fps.makeFPS();
}
}
/***//**
*变更球体轨迹
*
*/
privatevoidgameUpdate()...{
for(inti=0;i<NUM_BALLS;i++)...{
ball[i].move();
}
}
/***//**
*变更图形
*/
publicvoidupdate(Graphicsg)...{
paint(g);
}
/***//**
*显示图形
*/
publicvoidpaint(Graphicsg)...{
//设定背景为白色,并清空图形
bg.setColor(Color.WHITE);
bg.fillRect(0,0,WIDTH,HEIGHT);
//FPS数值显示
bg.setColor(Color.BLUE);
bg.drawString("FPS:"+fps.getFPS(),4,16);
//分别绘制相应球体
for(inti=0;i<NUM_BALLS;i++)...{
ball[i].draw(bg);
}
g.drawImage(screen,0,0,this);
g.dispose();
}
publicstaticvoidmain(String[]args)...{
Framefrm=newFrame();
frm.setTitle("JavaFPS速度测试(由Loonframework框架提供)");
frm.setSize(WIDTH,HEIGHT+20);
frm.setResizable(false);
frm.add(newBallPanel());
frm.setVisible(true);
frm.addWindowListener(newWindowAdapter()...{
publicvoidwindowClosing(WindowEvente)...{
System.exit(0);
}
});
}
}
分享到:
相关推荐
三角形三边用例生成器 自动化的生成测试用例
基于路径覆盖的自动化生成测试用例,含有三角形判断等近十个测试函数
java通用测试用例java通用测试用例java通用测试用例java通用测试用例
自动生成测试用例,通过运行本程序,可以自动的生成默认格式的XML文档,同时可以用用户定制的XML标签去替换默认生成的XML标签。
分析了软件测试中测试用例自动生成技术的发展现状和粒子群优化算法的基本原理及实现步骤,并详细研究了几种重要的改进的粒子群优化算法。在此基础上,改进了基本粒子群优化算法,提出了基于改进的粒子群优化算法的测试...
根据接口参数,自动生成测试用例,目前还没有写完整,正在完善中
TCG 是我以前写的一个利用正交表生成测试用例的小工具。
利用jmmslib包生成的彩信测试用例利用jmmslib包生成的彩信测试用例利用jmmslib包生成的彩信测试用例
根据excel用例列表生成需求规格说明、测试用例(包括用例和数据样本)文档. 非常好用
由于最近做一个项目需要对MATLAB电路图做测试,且需要满足MCDC且覆盖每个门,由于 手工生成非常麻烦而且也容易出错,所以做了个工具来自动生成测试用例。 有两种现实模式:GDI+、D3D 自动生成测试用例 ...
为了减小所生成的组合测试用例集规模,提出了一种基于one-test-at-a-time策略的差分进化算法来求解该问题的方案。通过实验,比较了不同变异方式的优化性能,考察了各个算法参数对优化性能的影响,并与其他常用方法...
本测试用例包括:查询数据库、查询聚类集合、查询数据、添加数据、添加多条数据、删除数据、修改数据操作,更多操作请使用者以此类推。
java测试用例JUnit教程
软件测试用例自动生成技术研究 软件测试用例自动生成技术研究
计算机实现基于正交试验的测试用例自动生成,陈磊,饶鸣,在软件测试过程中,想达到完全的测试在项目有限的时间和人力物力的局限之下,是不容易实现的,利用一些黑盒测试用例生成方法能够
嵌入式软件测试嵌入式软件测试自动生成测试用例嵌入式软件测试自动生成测试用例嵌入式软件测试自动生成测试用例嵌入式软件测试自动生成测试用例
JAVA上加密算法的实现用例 JAVA上加密算法的实现用例
PICT资源包括: PICT用户指南 成对组合覆盖-与-PICT-的应用 组合测试-原理与方法 PICT工具 两个生成用例演示: 1 测试数据生成用例 2 登录案例生成用例
Java设计模式分类及测试用例代码
通过计算机视觉修复SeleniumE2E测试用例的研究原型工具_Java_下载.zip