在视频领域,24 fps以及其他任何内容都很流畅. Cocos2d似乎是
只有当它的60 fps或者更低时才能平滑.之间的任何事情
30和50肯定不流畅,fps计数器看起来不准确……
为什么是这样?或者只有我这种情况?
这种行为实际上有几个原因,它不仅仅是cocos2d,而是在启用了 vertical synchronization(VSYNC)的环境中的任何游戏引擎中都能看到的效果.在iOS上,VSYNC始终处于打开状态,在PC上,如果它们始终低于显示器的速率( screen tearing),则通常可以选择将其关闭以提高帧速率.通常,像iOS设备这样的LCD会以60 Hz的频率更新其显示器,从而实现最大化60 fps.Cocos2D 1.x默认使用CADisplayLink类进行更新,Cocos2D 2.x仅使用CADisplayLink. CADisplayLink使更新与屏幕刷新率同步.表示在屏幕完成绘制其内容后发送通知.
当你获得60 fps时,一切都很好.但是如果游戏无法及时渲染帧以渲染60 fps,则只有在下一次屏幕刷新完成后才会收到下一次更新.一旦帧速率下降到60 fps以下,这就有效地将帧速率减半 – 或者换句话说,只要你的更新速度低于60 fps.渲染周期需要超过16.666毫秒才能完成.这意味着在iOS上使用CADisplayLink更新时,您只能拥有60,30,20和15 fps(60除以1,2,3和4)的离散帧速率.
效果非常明显,因为帧速率在60,30,20和15 fps之间波动 – 即使只是几分之一秒 – 也不会感觉光滑,主要是因为它非常不稳定 – 不稳定是我们注意到的“不光滑” ”.如果您的游戏受此影响,您可能会发现将帧速率限制为30 fps实际上会使游戏显得更加流畅.您还有更多时间来更新&渲染帧之间的东西.
这是24 fps电影帧速率的稳定性被设想为“流畅”,但电影导演也学会了避免有限帧率变得非常明显的场景.例如,他们经常避免游戏经常发生的事情:侧向滚动,即相机的侧向移动或通过相机的物体的侧向移动.
当你观看霍比特人时,你会惊讶地发现电影的平滑程度是多少 – 这是第一部以48 fps运行的大片.你会立即注意到电影中的角色有多“真实”和“逼真”.要获得一个印象,请查看此unofficial 48 fps The Hobbit trailer.
cocos2d显示为fps并不能准确表示从60到30到20和15 fps的切换,而是几帧的平均帧速率.因此,当cocos2d打印“45 fps”时,它意味着游戏显示30 fps的一半时间,另一半则是过去几帧的60 fps.