当在 SpriteKit 中取消暂停视图时,我注意到 fps 显着下降(帧速率下降在 5-10fps 之间)。我用空项目(Spritekit 游戏模板)尝试了这个。这是代码:
if(!self.view.paused){
self.view.paused = YES;
NSLog(@"Paused");
}else{
NSLog(@"Unpaused");
self.view.paused = NO;
}
如果我暂停场景,一切都会按预期进行,帧率稳定在 60 fps。我正在设备上测试这个。
if(!self.paused){
self.paused = YES;
NSLog(@"Paused");
}else{
NSLog(@"Unpaused");
self.paused = NO;
}
这可能会在取消暂停时给游戏带来问题,因为某些帧会被跳过......有什么想法发生了什么吗?
我假设取消暂停后它会暂时下降?或者取消暂停后帧率总是很低。这只发生在 iOS 8 或 iOS 9 上。你能尝试一下 iOS 9 吗?我确信这种情况可能会发生,因为在取消暂停后,Sprite-Kit 需要稍微“预热”渲染周期。您可以尝试在仪器中进行分析并查看发生了什么。
至于解决方案,您可以尝试降低speed
你的SKPhysicsWorld
取消暂停后暂时停止,这样物理效果就不会跳跃,因为 Sprite Kit 有一个可变的时间步长,不幸的是无法更改。如果是跳跃的动作,你可以尝试降低speed
你的SKScene
。理想情况下,你应该两者都做。
此外,如果您只需要担心操作,您可以尝试仅暂停场景而不是 SKView(但请记住您的更新方法将会运行)。或者尝试暂时暂停场景,然后在取消暂停 SKView 后取消暂停。
除此之外,除了尝试为丢帧做好准备之外,您实际上没有什么其他办法可以解决此问题。如果您还没有向 Apple 报告,请务必向 Apple 报告。
以下是所有这些属性的类参考。
SKView-暂停
如果值为 YES,场景的内容将固定在屏幕上。没有动作
执行并且不执行物理模拟。
SKScene - 速度
默认值为 1.0,这意味着所有操作都按其各自的值运行
正常的速度。如果您设置不同的速度,时间似乎会跑得更快
或者对于在节点及其后代上执行的所有操作来说更慢。
例如,如果将速度值设置为 2.0,则操作将运行两倍
快速地。
SKScene - 暂停
如果值为 YES,则跳过该节点(及其所有后代)
当场景处理动作时。
SKPhysicsWorld - 速度
默认值为1.0,表示模拟正常运行
速度。默认值以外的值会更改此时的速率
通过物理模拟。例如,速度值为 2.0
表明物理模拟中的时间流逝速度是
场景的模拟时间。值为 0.0 会暂停物理
模拟。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)