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

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

director->setAnimationInterval(1.0 / );

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

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

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

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

1.修改帧率将60改成40

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

2.增加一个属性变量

private long renderingElapsedTime = 0;

3.重写渲染方法onDrawFrame

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

Cocos2d-x 3.0修改Android平台帧率fps - 解决游戏运行手机发热发烫问题的更多相关文章

  1. Android应用帧率--FPS测试

    Android应用帧率FPS是衡量应用流畅度的一个非常重要的指标,可以根据FPS对应用做一些优化,那么在开发过程中如何来测试我们的应用的FPS呢? 准备工具:Eclipse + Android测试终端 ...

  2. 结对编程--基于android平台的黄金点游戏(2.0版本)

    在昨天上传完博客之后发现一个重大的bug...故在此推出2.0版本. 博文详情见:http://www.cnblogs.com/RayShea/p/5372398.html coding地址:http ...

  3. 结对编程--基于android平台的黄金点游戏

    游戏内容: 阿超的课都是下午两点钟,这时班上不少的同学都昏昏欲睡,为了让大家兴奋起来,阿超让同学玩一个叫“黄金点”的游戏: N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或1 ...

  4. 【第四篇章-android平台MediaCodec】解决Observer died. Quickly, do something, ... anything...

    当出现!!!Observer died. Quickly, do something, ... anything...说明你的程序已经出现严重异常了,那会是什么情况呢?这个问题困扰了我许久,后来原来是 ...

  5. 怎样在Android开发中FPS游戏实现的两种方式比较

    怎样在Android开发中FPS游戏实现的两种方式比较 如何用Android平台开发FPS游戏,其实现过程有哪些方法,这些方法又有哪些不同的地方呢?首先让我们先了解下什么是FPS 英文名:FPS (F ...

  6. 基于Cocos2d-x-1.0.1的飞机大战游戏迁移到Cocos2d-x-3.0版本,并移植到Android平台成功运行

    一.版本迁移中的问题 1.游戏元素Sprite.Label.Action等等的创建函数名都改为create. 2.函数的回调callfunc_selectorcallfuncN_selectorcal ...

  7. Cocos2dx-3.0版本 从开发环境搭建(Win32)到项目移植Android平台过程详解

    作为重量级的跨平台开发的游戏引擎,Cocos2d-x在现今的手游开发领域占有重要地位.那么问题来了,作为Cocos2dx的学习者,它的可移植特性我们就需要掌握,要不然总觉得少一门技能.然而这个时候各种 ...

  8. Unity20172.0 Android平台打包

    Android SDK及Jdk百度网盘下载链接:https://pan.baidu.com/s/1dFbEmdz 密码:pt7b Unity20172.0 Android平台打包 简介说明: 第一步: ...

  9. cocos2dx-3.0(21) 移植android平台 说多了都是泪

    ----我的生活,我的点点滴滴! ! 网上3.0的教程真心少.能够说没有吧,大多都是2.x 或者 3.0測试版之类的,因为我心大,没有照着2.x去搞,后来搞完后总结了一下,发觉事实上3.0的移植and ...

随机推荐

  1. 关于 iOS 10 中 ATS / HTTPS /2017 问题

    本文于 2016 年 11 月 28 日按照 Apple 最新的文档和 Xcode 8 中的表现进行了部分更新. WWDC 15 提出的 ATS (App Transport Security) 是 ...

  2. 报错:'Could not load NIB in bundle: 'NSBundle解决办法

    1.首先检查拼写是否正确: 2.断开连线,重新连接view与files' owner; 3.规避敏感View名.Xcode中有许多名字是系统预留的.你如果用了也会报这个错误.

  3. Jquery each() 如何操作动态添加的DOM元素

    JQ each页面上的DOM元素的时候,如果有一部分的DOM是ajax异步加载的,那么each可能遍历不到元素,异步请求数据的同时不会影响后面的代码执行,今天就遇到这个问题了, 解决方案是讲ajax改 ...

  4. Android开发的那些坑和小技巧

    1.android:clipToPadding 意思是控件的绘制区域是否在padding里面.默认为true.如果你设置了此属性值为false,就能实现一个在布局上事半功陪的效果.先看一个效果图. 上 ...

  5. Zebra_Dialog 弹出层插件

    . Default dialog box, no custom settings. Click here to open. $.Zebra_Dialog('<strong>Zebra_Di ...

  6. [USACO2003][poj2112]Optimal Milking(floyd+二分+二分图多重匹配)

    http://poj.org/problem?id=2112 题意: 有K个挤奶器,C头奶牛,每个挤奶器最多能给M头奶牛挤奶. 每个挤奶器和奶牛之间都有一定距离. 求使C头奶牛头奶牛需要走的路程的最大 ...

  7. c#截图

    private void Form_Load(object sender, EventArgs e){  //接收web url  string colle = string.Empty;  stri ...

  8. Tomcat 404

    原因:servlet没有配置正确 ,查看web.xml确认正确,以及自己的请求路径正确 在IE中提示"404"错误有以下三种情况 1.未部署Web应用 2.URL输入错误 排错方法 ...

  9. EJB3 QL查询

    http://www.blogjava.net/liaojiyong/archive/2008/07/11/56216.html EJB3 QL查询 EJB3的查询语言是一种和SQL非常类似的中间性和 ...

  10. 利用Arraylist输入学生的成绩,求出平均分和总分。

    Console.WriteLine("请输入学生人数:"); int n=int.Parse(Console.ReadLine()); ArrayList arr= new Arr ...