为什么在cocos2d中只有60帧每秒才是真正的流畅?

9

这个问题可能已经被问过了,但我找不到答案...

在视频领域中,24 fps及以上的帧率是流畅的。但是,Cocos2d似乎只有在60 fps或稍低的帧率时才能保持流畅。30至50之间的任何帧率看起来都不太流畅,fps计数器似乎也不准确...

为什么会这样?还是只有我有这种情况?

2个回答

25
这种行为实际上有几个原因,不仅仅是cocos2d引擎,而是在启用垂直同步(VSYNC)的任何游戏引擎中都会出现的效果。在iOS上,VSYNC始终开启,在PC上,如果帧率一直低于显示器速率,则通常可以选择关闭它以提高帧率,但代价是屏幕撕裂。通常像iOS设备这样的液晶显示器以60 Hz更新其显示,最多允许60 fps。
Cocos2D 1.x默认使用CADisplayLink类进行更新,Cocos2D 2.x专门使用CADisplayLink。CADisplayLink导致更新与屏幕刷新率同步。这意味着在屏幕完成绘制其内容时发送通知。
当您获得60帧每秒时,一切都很好。但是,如果游戏无法在时间内渲染一帧以呈现60帧每秒,则它将仅在下一次屏幕刷新完成后收到其下一个更新。这实际上将帧速率减半,一旦帧速率降至60帧每秒以下,或者换句话说,一旦您的更新和渲染周期需要超过16.666毫秒才能完成。这意味着您只能在iOS上使用CADisplayLink更新具有60、30、20和15帧每秒(60除以1、2、3和4)的离散帧速率。
效果非常明显,因为帧速率在60、30、20和15帧每秒之间波动 - 即使只有一小部分时间 - 感觉不流畅,主要是因为它如此不稳定 - 不稳定性是我们感觉到的“不流畅”。如果您的游戏受到此影响,您可能会发现将帧速率限制为30帧每秒实际上会使游戏看起来更平滑。您还有更多时间在帧之间更新和渲染内容。

电影的24帧每秒的稳定性被认为是“流畅”的,但电影导演也学会避免出现帧数受限的场景。例��,他们非常避免游戏经常出现的侧向滚动,即相机的侧向移动或物体从相机旁边横向移动。

当你观看霍比特人时,你会惊讶地发现电影可以变得更加平滑 - 这是第一部以48帧每秒运行的大片电影。你会立即注意到电影中的角色更加“真实”和“逼真”。如果您想要印象,请查看这个非官方48 fps霍比特人预告片

cocos2d显示的fps并不是由60、30、20和15 fps之间切换的准确表示,而是几帧的平均帧率。因此,当cocos2d打印“45 fps”时,这意味着在过去的几帧中,有一半时间游戏以30 fps显示,另一半时间以60 fps显示。


1
一如既往,这是一个有用信息的宝库。谢谢。 - YvesLeBorg
抱歉,我刚才错过了你的回答 : )。非常有启发性,谢谢! - yurki

2

两个主要问题。

第一个是匹配显示器的刷新率 - 否则会出现不规则运动,而眼睛/大脑很擅长发现这一点。至少要是它的倍数。

第二个是运动模糊。电影/视频往往有运动模糊,这会欺骗观众看到连续的运动。


我明白了,那很有道理。但是桌面显示器通常也具有60hz的刷新率。我记不清是否曾经在低于50fps的桌面游戏中遇到过问题。也许我记错了...这是iPhone上的典型情况吗? - yurki
现在台式电脑显示器通常比以前高一些。此外,一些便宜的液晶显示器可能会有点模糊。除此之外,没有什么特别的事情发生。 - JasonD
我注意到60Hz的显示器会出现闪烁问题。 - user739711
如果禁用垂直同步,以50帧每秒运行的桌面游戏将感觉更加流畅。那种“闪烁”可能是由于禁用垂直同步引起的屏幕撕裂所导致的。 - CodeSmile

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接