Android計算遊戲FPS

來源:互聯網
上載者:User

今天寫遊戲需要計算FPS,就在網上搜到了Loon的一個java 遊戲計算FPS的類,修改了一下如下(著作權屬原作者):

package com.px.FPS;<br />import java.text.DecimalFormat;<br />/**<br /> *<br /> */<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 /> */<br />public class CFPSMaker<br />{<br /> /**<br /> * 設定動畫運行多少幀後統計一次幀數<br /> */<br /> public static final int FPS = 8; </p><p> /**<br /> * 換算為運行周期<br /> * 單位: ns(納秒)<br /> */<br /> public static final long PERIOD = (long) (1.0 / FPS * 1000000000);<br /> /**<br /> * FPS最大間隔時間,換算為1s = 10^9ns<br /> * 單位: ns<br /> */<br /> public static long FPS_MAX_INTERVAL = 1000000000L; </p><p> /**<br /> * 實際的FPS數值<br /> */<br /> private double nowFPS = 0.0;</p><p> /**<br /> * FPS累計用間距時間<br /> * in ns<br /> */<br /> private long interval = 0L;<br /> private long time;<br /> /**<br /> * 運行楨累計<br /> */<br /> private long frameCount = 0;</p><p> /**<br /> * 格式化小數位元<br /> */<br /> private DecimalFormat df = new DecimalFormat("0.0"); </p><p> /**<br /> * 製造FPS資料<br /> *<br /> */<br /> public void makeFPS()<br /> {<br /> frameCount++;<br /> interval += PERIOD;<br /> //當實際間隔符合時間時。<br /> if (interval >= FPS_MAX_INTERVAL)<br /> {<br /> //nanoTime()返回最準確的可用系統計時器的當前值,以毫微秒為單位<br /> long timeNow = System.nanoTime();<br /> // 獲得到目前為止的時間距離<br /> long realTime = timeNow - time; // 單位: ns<br /> //換算為實際的fps數值<br /> nowFPS = ((double) frameCount / realTime) * FPS_MAX_INTERVAL;</p><p> //變更數值<br /> frameCount = 0L;<br /> interval = 0L;<br /> time = timeNow;<br /> }<br /> }</p><p> public long getFrameCount()<br /> {<br /> return frameCount;<br /> }</p><p> public void setFrameCount(long frameCount)<br /> {<br /> this.frameCount = frameCount;<br /> }</p><p> public long getInterval()<br /> {<br /> return interval;<br /> }</p><p> public void setInterval(long interval)<br /> {<br /> this.interval = interval;<br /> }</p><p> public double getNowFPS()<br /> {<br /> return nowFPS;<br /> }</p><p> public void setNowFPS(double nowFPS)<br /> {<br /> this.nowFPS = nowFPS;<br /> }</p><p> public long getTime()<br /> {<br /> return time;<br /> }</p><p> public void setTime(long time)<br /> {<br /> this.time = time;<br /> }</p><p> public String getFPS()<br /> {<br /> return df.format(nowFPS);<br /> }<br />}

 

簡單的使用方法:

首先,初始化一個FPSMaker執行個體

CFPSMaker fpsMaker;<br />fpsMaker = new CFPSMaker();<br />

然後,在需要計算FPS時初始化以下目前時間:

fpsMaker.setNowFPS(System.nanoTime());

最後,在遊戲迴圈中計算和顯示當前遊戲幀速:

fpsMaker.makeFPS();<br />GameManager.drawFPS(fpsMaker.getFPS() + " FPS");

OVER!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.