Objective c [CCDirector sharedDirector].secondsPerFrame返回的值为零

Objective c [CCDirector sharedDirector].secondsPerFrame返回的值为零,objective-c,cocos2d-iphone,xcode5,Objective C,Cocos2d Iphone,Xcode5,我正在寻找一种获取FPS速率的方法,我在CCDirector中找到了属性secondsPerFrame,但是每个CCLog都说,[CCDirector sharedDirector]。secondsPerFrame是“0.000000” 如果我能根据帧速率的下降调整代码,游戏基本上永远不会运行在60帧以下,这将是惊人的 如果我能定制代码,立即调整帧速率下降, 游戏基本上不会以低于60帧/秒的速度运行,这将是 太棒了 如果可能的话,我们会发现这是渲染引擎中的一个标准功能。唉,事实并非如此 检测丢弃

我正在寻找一种获取FPS速率的方法,我在CCDirector中找到了属性secondsPerFrame,但是每个CCLog都说,
[CCDirector sharedDirector]。secondsPerFrame
是“0.000000”

如果我能根据帧速率的下降调整代码,游戏基本上永远不会运行在60帧以下,这将是惊人的

如果我能定制代码,立即调整帧速率下降, 游戏基本上不会以低于60帧/秒的速度运行,这将是 太棒了

如果可能的话,我们会发现这是渲染引擎中的一个标准功能。唉,事实并非如此

检测丢弃的帧意味着必须已经丢弃帧。切换代码路径的开销,尤其是切换回“高细节”版本的开销通常也太大

除了设计一款视觉效果甚至算法随时可能变化的游戏这一难题之外

加上玩家的感知将是相当负面的——考虑流视频自动调整到带宽,有时几秒钟就会显得很不稳定。 如果你不能始终以60 fps的速度进行比赛,那么最好将比赛限制在30 fps,并针对稳定的30 fps而不是波动的40到60 fps进行设计

无论如何,如果您记录了
secondsPerFrame
并得到0.0000,则可能是使用了错误的格式说明符。请尝试以下操作:

NSLog(@"spf: %f", [CCDirector sharedDirector].secondsPerFrame);

请记住,此值可能是多个帧的平均值,并且可能不会在发布版本中更新。请检查代码中是否有任何#if/#ifdef。

谢谢。我知道你的意思,但我认为在这种特定情况下,用户不会注意到它,因为我删除了难以看到的粒子,并且基本上只需要添加5-10行代码。我问这个问题在其他地方,问题是除非启用ShowStats标签,否则在calculateMPF中不会计算secondsPerFrame…您可以尝试在自定义类中复制计算spf的代码。如果我没记错的话,这只是存储最后一个时间戳并将其与最近一个时间戳进行比较的几行代码,可能还有n#导入标准时间函数。