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

相關文章
相關標籤/搜索