有人說游戲就是動畫,就象電影一樣將一幅幅畫面展現給我們!
游戲中有個關鍵的部分叫做FPS
在計算機圖像領域中,“FPS”是詞組“Frames Per Second”的縮寫?!癋rames 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.
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.49028c.com)
新聞熱點
疑難解答