2d手机平面游戏帧数的问题?
360U2953864971 2022-04-02 06:49 使用Cocos2d-x 3.0开发游戏之后,发现游戏在android手机上发热非常严重,在魅族2上,几乎担心手机会爆炸了~~~采取的一个措施就是降低帧率,因为游戏对于帧率要求不是非常高。做过cocos2d开发的同学应该都知道在win32平台修改帧率的方式非常简单,就是在AppDelegate.cpp文件中修改:1director->setAnimationInterval(1.0 / 40);但是这种修改方式在导出android安卓apk到真机测试的时候,发现左下角的调试信息还是现实60~65帧,完全不受影响,网上搜索之后,发小安卓的修改需要修改cocos2dx-x生成的java代码中修改,具体在文件:Cocos2dxRenderer.java在代码中可以看到以下的属性设置和重写的方法:12private static long sAnimationInter开发者_StackOverflowval = (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官方有实现好的帧率算法,但是被注释掉了,注释文本说存在一定的bug,帧率不精确,实际上大部分情况都可已正常使用,所以最好不要采用了~这么做了之后,游戏的帧率在38~41左右,发热的问题也基本解决了。最后,如果你要更好,更精确的帧率算法,也可以留言回复...
63581912 2022-04-02 06:59 cpu性能不够,一般cpu和显开发者_JAVA百科示核心价位要一样
喵皮凤爪 开发者_开发问答 2022-04-02 07:00 测试一般是最佳状态,也就是说火力全开的那种
精彩评论