zoukankan      html  css  js  c++  java
  • Cocos2d-x 3.0修改Android平台帧率fps

    使用Cocos2d-x 3.0开发游戏之后,发现游戏在android手机上发热非常严重,在魅族2上,几乎担心手机会爆炸了~~~采取的一个措施就是降低帧率,因为游戏对于帧率要求不是非常高。

    做过cocos2d开发的同学应该都知道在win32平台修改帧率的方式非常简单,就是在AppDelegate.cpp文件中修改:

    1
    director->setAnimationInterval(1.0 40);

    但是这种修改方式在导出android安卓apk到真机测试的时候,发现左下角的调试信息还是现实60~65帧,完全不受影响,网上搜索之后,发小安卓的修改需要修改cocos2dx-x生成的java代码中修改,具体在文件:Cocos2dxRenderer.java

    在代码中可以看到以下的属性设置和重写的方法:

    1
    2
    private static long sAnimationInterval = (long) (1.0 60 * Cocos2dxRenderer.NANOSECONDSPERSECOND);
    public void onDrawFrame(final GL10 gl) {}

    如果要修改android平台的帧率,可以通过修改这些代码来改进,具体的操作方法如下

    1.修改帧率将60改成40

    1
    private static long sAnimationInterval = (long) (1.0 40 * Cocos2dxRenderer.NANOSECONDSPERSECOND);

    2.增加一个属性变量

    1
    private long renderingElapsedTime = 0;

    3.重写渲染方法onDrawFrame

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    @Override
    public 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左右,发热的问题也基本解决了。

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

  • 相关阅读:
    HDU 5791 Two (DP)
    POJ 1088 滑雪 (DPor记忆化搜索)
    LightOJ 1011
    POJ 1787 Charlie's Change (多重背包 带结果组成)
    HDU 5550 Game Rooms (ccpc2015 K)(dp)
    HDU 5542 The Battle of Chibi (ccpc 南阳 C)(DP 树状数组 离散化)
    HDU 5543 Pick The Sticks (01背包)
    HDU 5546 Ancient Go (ccpc2015南阳G)
    NB-IoT的DRX、eDRX、PSM三个模式 (转载,描述的简单易懂)
    MQTT 嵌入式端通讯协议解析(转)
  • 原文地址:https://www.cnblogs.com/wdd-123/p/4746552.html
Copyright © 2011-2022 走看看