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

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

  • 相关阅读:
    面向机器学习的特征工程
    卷积可视化,图像理解,deepdream,风格迁移
    损失函数
    开源是如何支撑区块链技术发展的
    揭秘机密计算:弥补最后一个入侵 “漏洞”
    什么是超大规模数据中心?
    比特币是避险资产还是储备资产?
    区块链技术生态持续优化,五大趋势不容忽视
    物联网低功耗广域网(LPWAN)的比较
    碎片化是物联网快速发展的阻碍,也是机会
  • 原文地址:https://www.cnblogs.com/wdd-123/p/4746552.html
Copyright © 2011-2022 走看看