首页 > 游戏

2d手机平面游戏帧数的问题

更新时间2019-05-21 09:09:49

2d游戏明明人物动作是30帧数但是软件测试为什么是60帧,就是我最近玩的游戏出了高帧率模式但是人物帧数感觉没有变不过其他和整体确实感觉流畅很多软件测试也是60帧这是为什么。

使用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 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 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左右,发热的问题也基本解决了。

最后,如果你要更好,更精确的帧率算法,也可以留言回复...


测试一般是最佳状态,也就是说火力全开的那种

cpu性能不够,一般cpu和显示核心价位要一样

测试是一种理想状态,和实际差的很远、。

上一篇:如何用手机玩天威電視體感游戏

下一篇:完美世界手游攻略仙法技能学哪些?