环境:
cocos creator 2.4.3
华为meta 50
背景:
小游戏 需要在update 里取帧率 发现跟时间对不上
游戏设置60帧
手机上显示 90帧
cc.game.setFrameRate(30) 显示 30帧
cc.game.setFrameRate(60) 显示 90帧
结论:
对于老版本的cocos creator 如果有依赖帧率的逻辑
需要自行注意逻辑正确性
cc.game.getFrameRate() 取出来的帧率 有可能 并不是当前真实帧率 只是逻辑帧率
源码分析:
cocos2dxRenderer.java @Override public void onDrawFrame(final GL10 gl) {
if (mNeedToPause) return; if (mNeedShowFPS) {
/ //IDEA: show FPS in Android Text control rather than outputing log. ++mFrameCount; long nowFpsTime = System.nanoTime(); long fpsTimeInterval = nowFpsTime - mOldNanoTime; if (fpsTimeInterval > L) {
double frameRate = .0 * mFrameCount / fpsTimeInterval; Cocos2dxHelper.OnGameInfoUpdatedListener listener = Cocos2dxHelper.getOnGameInfoUpdatedListener(); if (listener != null) {
listener.onFPSUpdated((float) frameRate); } mFrameCount = 0; mOldNanoTime = System.nanoTime(); } / } /* * No need to use algorithm in default(60 FPS) situation, * since onDrawFrame() was called by system 60 times per second by default. */ if (sAnimationInterval <= INTERVAL_60_FPS) {
Cocos2dxRenderer.nativeRender(); } else {
final long now = System.nanoTime(); final long interval = now - this.mLastTickInNanoSeconds; if (interval < Cocos2dxRenderer.sAnimationInterval) {
try {
Thread.sleep((Cocos2dxRenderer.sAnimationInterval - interval) / Cocos2dxRenderer.NANOSECONDSPERMICROSECOND); } catch (final Exception e) {
} } /* * Render time MUST be counted in, or the FPS will slower than appointed. */ this.mLastTickInNanoSeconds = System.nanoTime(); Cocos2dxRenderer.nativeRender(); } }
讯享网
分析上述代码
讯享网if (sAnimationInterval <= INTERVAL_60_FPS) {
Cocos2dxRenderer.nativeRender(); }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/35569.html