cocos2d-iphone - 为什么在cocos2d中只有60 fps真正平滑?

标签 cocos2d-iphone frame-rate smooth

它可能以前曾被问过,但我在任何地方都找不到。。。

在videoland中,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,这将有效地将帧速率减半-换句话说,只要更新和渲染周期花费的时间超过16.666毫秒即可完成。这意味着在具有CADisplayLink更新的iOS上,您只能具有60、30、20和15 fps的离散帧速率(60除以1、2、3和4)。

这种效果非常明显,因为帧率在60、30、20和15 fps之间波动-即使只是几分之一秒-不会感觉到光滑,主要是因为它非常不稳定-不稳定是我们注意到的“不稳定” ”。如果您的游戏受到此影响,则可能会发现将帧速率限制为30 fps实际上会使游戏看起来更流畅。您也有更多时间更新和渲染帧之间的内容。

被认为是“平滑”的是24 fps电影帧速率的稳定性,但是电影导演也学会了避免在有限帧速率变得太明显的场景中使用。例如,他们避开了 hell 般经常玩的游戏:向侧面滚动,即摄像机横向移动,或通过摄像机的物体横向移动。

当您观看《霍比特人》时,您会惊讶地看到电影流畅得多,这是第一部以48 fps播放的大片。您会立即注意到电影中角色的“真实”和“逼真的”形象。要获得印象,请查看此unofficial 48 fps The Hobbit trailer

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

关于cocos2d-iphone - 为什么在cocos2d中只有60 fps真正平滑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13830185/

相关文章:

iphone - 在 cocos2d 中使用 NSTimer 制作随机对象

ios - 帧速率问题 Apple SpriteKit

R : stat_smooth groups (x axis)

java - 我的 Java 游戏的 fps 很挣扎

android - 在 Android 上访问高 fps 相机

STL - 如何在STL加载的BufferGeometry中平滑网格三角形

R/ggplot2 : smooth on entire dataset while enforcing a ylim cap

iphone - COCOS 2d V2.x 菜单对齐问题 - 在 iPhone Simulator 5.1 和 iPhone 4 设备上测试

ios - 如何获得高质量的 iOS 屏幕截图?

macos - 如何让 Leap Motion 在 OS X 应用程序中控制我的光标?