So I really managed to achieve this. You have to edit the Cocos2dxRenderer.java file and then clean and rebuild Cocos2d-x.
Here is the code:
public void onDrawFrame(final GL10 gl) { // FPS controlling algorithm is not accurate, and it will slow down FPS // on some devices. So comment FPS controlling code. try { if (loopRuntime < 40) { Log.wtf("RENDERER", "Sleeping for == " + (40 - loopRuntime)); Thread.sleep(40 - loopRuntime); } } catch (InterruptedException e) { e.printStackTrace(); } //final long nowInNanoSeconds = System.nanoTime(); //final long interval = nowInNanoSeconds - this.mLastTickInNanoSeconds; loopStart = System.currentTimeMillis(); // should render a frame when onDrawFrame() is called or there is a // "ghost" Cocos2dxRenderer.nativeRender(); loopEnd = System.currentTimeMillis(); loopRuntime = (loopEnd - loopStart); Log.wtf("RENDERER", "loopRunTime == " + loopRuntime); // fps controlling /*if (interval < Cocos2dxRenderer.sAnimationInterval) { try { // because we render it before, so we should sleep twice time interval Thread.sleep((Cocos2dxRenderer.sAnimationInterval - interval) / Cocos2dxRenderer.NANOSECONDSPERMICROSECOND); } catch (final Exception e) { } }*/ //this.mLastTickInNanoSeconds = nowInNanoSeconds; }
The strange thing is that when I uncommented the parts of the fps control that were there, he did nothing, and when I wrote my version, it does ... Anyway, the "magic" value of 40 gives about 35 frames per second, but you Of course, you can easily change it to work with the values passed through setAnimationInterval ();
EDIT: I moved the loopStart line after sleep -> sleep time should not be included in loopTime.
source share