cocos2dx-3.0 android限帧问题

    今天研究了一下cocos2dx-3.0帧限制问题,按引擎提供的接口,修改java

    director->setAnimationInterval(1.0 / 30); android

    但愿把程序控制在30帧如下。编译程序跑了一下,在WIN和IOS平台下有效,可是android却一直坚挺在60帧左右。研究了一下cocos源码。算法

    在Cocos2dxRenderer.java中定义了一个静态变量:
函数

    private static long sAnimationInterval = (long) (1.0 / 60 * Cocos2dxRenderer.NANOSECONDSPERSECOND);
    这里写明了帧间隔时间,可是引擎里并无使用这个,并且是把限制的代码注释了,提示说限制算法是不正确的,在一样的设备上,帧限制可能比预期要慢,因此注释掉了。说明程序根本没限帧,提示是假的,程序一直在空跑,竞争CPU。spa

    我把注释放开,在模拟器上跑了一下,设置了35帧/秒,但跑起来有50帧/秒。本身修改了一下算法:code

    1. 在sAnimationInterval变量下面加一个变量定义:
接口

    private static long renderingElapsedTime = sAnimationInterval;
源码

    2. 重写onDrawFrame函数:
it

 

public void onDrawFrame(final GL10 gl) {
 
  long interval = 0; //sleep修正值
  try {
         if (renderingElapsedTime < Cocos2dxRenderer.sAnimationInterval) {
            long sleepBefore = System.nanoTime();
            Thread.sleep((Cocos2dxRenderer.sAnimationInterval - renderingElapsedTime) / Cocos2dxRenderer.NANOSECONDSPERMICROSECOND);
            interval = (System.nanoTime() - sleepBefore) - (Cocos2dxRenderer.sAnimationInterval - renderingElapsedTime);
            if(interval < 0) interval = 0;
         }
     } catch (InterruptedException e) {
         e.printStackTrace();
     }
 
     long renderingStartedTimestamp = System.nanoTime();
  
     Cocos2dxRenderer.nativeRender();
 
     renderingElapsedTime = (System.nanoTime() - renderingStartedTimestamp);
  
     renderingElapsedTime = renderingElapsedTime + interval;
 
  }


最后在真机跑了一下设置35帧/秒,结果是3四、33帧/秒。io

相关文章
相关标签/搜索