2d手機平面游戲幀數(shù)的問題
2d游戲明明人物動作是30幀數(shù)但是軟件測試為什么是60幀,,就是我最近玩的游戲出了高幀率模式但是人物幀數(shù)感覺沒有變不過其他和整體確實感覺流暢很多軟件測試也是60幀這是為什么,。
使用Cocos2d-x 3.0開發(fā)游戲之后,發(fā)現(xiàn)游戲在android手機上發(fā)熱非常嚴重,,在魅族2上,幾乎擔心手機會爆炸了~~~采取的一個措施就是降低幀率,因為游戲對于幀率要求不是非常高,。
做過cocos2d開發(fā)的同學應該都知道在win32平臺修改幀率的方式非常簡單,,就是在AppDelegate.cpp文件中修改:
1director->setAnimationInterval(1.0 / 40);
但是這種修改方式在導出android安卓apk到真機測試的時候,發(fā)現(xiàn)左下角的調(diào)試信息還是現(xiàn)實60~65幀,,完全不受影響,,網(wǎng)上搜索之后,發(fā)小安卓的修改需要修改cocos2dx-x生成的java代碼中修改,,具體在文件:Cocos2dxRenderer.java
在代碼中可以看到以下的屬性設置和重寫的方法:
12private static long sAnimationInterval = (long) (1.0 / 60 * Cocos2dxRenderer.NANOSECONDSPERSECOND);public void onDrawFrame(final GL10 gl) {}
如果要修改android平臺的幀率,,可以通過修改這些代碼來改進,具體的操作方法如下:
1.修改幀率將60改成40
1private static long sAnimationInterval = (long) (1.0 / 40 * Cocos2dxRenderer.NANOSECONDSPERSECOND);
2.增加一個屬性變量
1private long renderingElapsedTime = 0;
3.重寫渲染方法onDrawFrame
1234567891011121314151617181920@Overridepublic void onDrawFrame(final GL10 gl) {try {if (renderingElapsedTime * NANOSECONDSPERMICROSECOND < Cocos2dxRenderer.sAnimationInterval) {Thread.sleep((Cocos2dxRenderer.sAnimationInterval - renderingElapsedTime * NANOSECONDSPERMICROSECOND) / NANOSECONDSPERMICROSECOND);}} catch (InterruptedException e) {e.printStackTrace();} // Get the timestamp when rendering startedlong renderingStartedTimestamp = System.currentTimeMillis(); // should render a frame when onDrawFrame() is called or there is a// "ghost"Cocos2dxRenderer.nativeRender(); // Calculate the elapsed time during renderingrenderingElapsedTime = (System.currentTimeMillis() - renderingStartedTimestamp);}
代碼中將渲染消耗的時間算進去,,所以得到的幀率應該來說非常準確了,。
注意,Cocos2dxRenderer中的onDrawFrame官方有實現(xiàn)好的幀率算法,,但是被注釋掉了,,注釋文本說存在一定的bug,幀率不精確,,實際上大部分情況都可已正常使用,,所以最好不要采用了~
這么做了之后,游戲的幀率在38~41左右,,發(fā)熱的問題也基本解決了,。
最后,如果你要更好,,更精確的幀率算法,,也可以留言回復...
測試一般是最佳狀態(tài),也就是說火力全開的那種
cpu性能不夠,,一般cpu和顯示核心價位要一樣
測試是一種理想狀態(tài),,和實際差的很遠、,。