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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值