2d手机平面游戏帧数的问题
生活随笔
收集整理的這篇文章主要介紹了
2d手机平面游戏帧数的问题
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
測試是一種理想狀態(tài),和實際差的很遠、。
使用Cocos2d-x 3.0開發(fā)游戲之后,發(fā)現(xiàn)游戲在android手機上發(fā)熱非常嚴重,在魅族2上,幾乎擔心手機會爆炸了~~~采取的一個措施就是降低幀率,因為游戲?qū)τ趲室蟛皇欠浅8摺W鲞^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改成401private static long sAnimationInterval = (long) (1.0 / 40 * Cocos2dxRenderer.NANOSECONDSPERSECOND);2.增加一個屬性變量1private long renderingElapsedTime = 0;3.重寫渲染方法onDrawFrame1234567891011121314151617181920@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 started long renderingStartedTimestamp = System.currentTimeMillis(); // should render a frame when onDrawFrame() is called or there is a // "ghost" Cocos2dxRenderer.nativeRender(); // Calculate the elapsed time during rendering renderingElapsedTime = (System.currentTimeMillis() - renderingStartedTimestamp);}代碼中將渲染消耗的時間算進去,所以得到的幀率應該來說非常準確了。注意,Cocos2dxRenderer中的onDrawFrame官方有實現(xiàn)好的幀率算法,但是被注釋掉了,注釋文本說存在一定的bug,幀率不精確,實際上大部分情況都可已正常使用,所以最好不要采用了~這么做了之后,游戲的幀率在38~41左右,發(fā)熱的問題也基本解決了。最后,如果你要更好,更精確的幀率算法,也可以留言回復...
cpu性能不夠,一般cpu和顯示核心價位要一樣
測試一般是最佳狀態(tài),也就是說火力全開的那種
使用Cocos2d-x 3.0開發(fā)游戲之后,發(fā)現(xiàn)游戲在android手機上發(fā)熱非常嚴重,在魅族2上,幾乎擔心手機會爆炸了~~~采取的一個措施就是降低幀率,因為游戲?qū)τ趲室蟛皇欠浅8摺W鲞^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改成401private static long sAnimationInterval = (long) (1.0 / 40 * Cocos2dxRenderer.NANOSECONDSPERSECOND);2.增加一個屬性變量1private long renderingElapsedTime = 0;3.重寫渲染方法onDrawFrame1234567891011121314151617181920@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 started long renderingStartedTimestamp = System.currentTimeMillis(); // should render a frame when onDrawFrame() is called or there is a // "ghost" Cocos2dxRenderer.nativeRender(); // Calculate the elapsed time during rendering renderingElapsedTime = (System.currentTimeMillis() - renderingStartedTimestamp);}代碼中將渲染消耗的時間算進去,所以得到的幀率應該來說非常準確了。注意,Cocos2dxRenderer中的onDrawFrame官方有實現(xiàn)好的幀率算法,但是被注釋掉了,注釋文本說存在一定的bug,幀率不精確,實際上大部分情況都可已正常使用,所以最好不要采用了~這么做了之后,游戲的幀率在38~41左右,發(fā)熱的問題也基本解決了。最后,如果你要更好,更精確的幀率算法,也可以留言回復...
cpu性能不夠,一般cpu和顯示核心價位要一樣
測試一般是最佳狀態(tài),也就是說火力全開的那種
總結(jié)
以上是生活随笔為你收集整理的2d手机平面游戏帧数的问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦见去世的亲戚好不好
- 下一篇: 做梦梦见狗咬一口是什么意思