如何控制游戏中的FPS
2007-12-23 12:29:24 来源:WEB开发网有人说游戏就是动画,就象电影一样将一幅幅画面展现给我们!
游戏中有个关键的部分叫做FPS
在计算机图像领域中,“FPS”是词组“Frames Per Second”的缩写。“Frames Per Second”在计算机图像范畴内被翻译为:“每秒传输帧数”。更确切的解释,就是“每秒中填充图像的帧数(帧/秒)“。这里的“FPS”就是我们常在CS游戏里说的“FPS”值,也可以理解为我们常说的“刷新率(Hz)”。
而当刷新率太低时我们肉眼都能感觉到屏幕的闪烁,不连贯,对图像显示效果和视觉感观产生不好的影响。在FPS游戏例如CS中也是一样的,游戏里的每一帧就是一幅静止画面,而“FPS”值越高也就是“刷新率”越高,每秒填充的帧数就越多,那么画面就越流畅。
为什么我们要专门涉及到FPS ,有人说使用线程Thread.sleep(一定时间)再描绘不就可以了吗!
但实际游戏中不是这样的 游戏地图的载入,图象的描绘都要消耗时间。有时多有时少,在这样的情况下我们使用Thread.sleep定时描绘会出现画面卡,不连贯的现象!
在此我们给出一个简单的控制FPS的方法,很简单就是判断间隔时间,时间<1000/FPS,那么等待一定时间,直到>=1000/FPS,那么继续!在此使用Funmobile公司的一段代码做为演示!!
Thread lThread=new Thread();//创立线程
lThread.start();//线程启动
public void run()
{
Thread pThreadTemp = Thread.currentThread();
do
{
if(pThreadTemp != lThread)// 判断当前线程是否为主线程 若不是返回
break;
long lTimeStart = System.currentTimeMillis();
System.out.PRintln("run");
repaint(0, 0, lWidth, lHeight);
serviceRepaints(); //这是强制描绘 这2个描绘每次消耗的时间不一定相等
long lTimeTaken = System.currentTimeMillis() - lTimeStart;
//获取时间间隔
if(lTimeTaken < (long)60) //若小于1000/FPS,等待剩余时间
try
{
synchronized(this)
{
Thread.sleep((long)60 - lTimeTaken);
}
}
catch(InterruptedException e)
{
System.out.println("error=".concat(String.valueOf(String.valueOf(e))));
}
} while(true);
}
这样做可以使画面刷新稳定,画面流畅连贯!感谢丁丁最近一段时间对我学习的帮助!
本文仅代表个人观点,大家有好的建议或方案可以到论坛提出!
转载注明出处 J2MEDEV
(出处:http://www.cncms.com)
更多精彩
赞助商链接