Sprite kit 在Spritekit中取消暂停视图时,fps显著下降

Sprite kit 在Spritekit中取消暂停视图时,fps显著下降,sprite-kit,frame-rate,skscene,skview,Sprite Kit,Frame Rate,Skscene,Skview,在SpriteKit中取消暂停视图时,我注意到显著的fps下降(帧速率下降5-10fps)。我尝试了这个空项目(Spritekit游戏模板)。代码如下: if(!self.view.paused){ self.view.paused = YES; NSLog(@"Paused"); }else{ NSLog(@"Unpaused"); self.view.paused = NO; } 如果我暂停场景,一切正常,帧稳

在SpriteKit中取消暂停视图时,我注意到显著的fps下降(帧速率下降5-10fps)。我尝试了这个空项目(Spritekit游戏模板)。代码如下:

if(!self.view.paused){
        self.view.paused = YES;
        NSLog(@"Paused");
    }else{
        NSLog(@"Unpaused");
        self.view.paused = NO;
    }
如果我暂停场景,一切正常,帧稳定在60帧/秒。我正在这个设备上测试

if(!self.paused){
        self.paused = YES;
        NSLog(@"Paused");
    }else{
        NSLog(@"Unpaused");
        self.paused = NO;
    }

这可能会在取消暂停时造成游戏性问题,因为某些帧将被跳过。。。你知道发生了什么事吗

我假设它在联合国暂停后暂时下降?或者在取消暂停后总是低fps。这只发生在iOS 8或iOS 9上。你能试试iOS9吗?我确信这可能会发生,因为在取消暂停后,Sprite Kit需要一点时间来“预热”渲染周期。您可以尝试在仪器中进行分析,看看发生了什么

至于解决方案,您可以尝试在取消暂停后暂时降低
SKPhysicsWorld的
速度
,这样物理就不会跳转,因为精灵套件的时间步长是可变的,不幸的是,这无法更改。如果是跳跃动作,您可以尝试降低
SKScene
速度。理想情况下,你可能应该同时做这两件事

此外,如果您只需要担心动作,您可以尝试只暂停场景而不是SKView(但请记住,您的更新方法将运行)。或者尝试暂时暂停场景,然后在取消暂停SKView后取消暂停

除此之外,除了为丢弃的帧做准备之外,你真的没有什么其他方法可以解决这个问题。如果你还没有,一定要向苹果报告

下面是所有这些属性的类引用

SKView暂停

如果该值为“是”,则场景的内容将固定在屏幕上。没有行动 执行,不执行物理模拟

场景-速度

默认值为1.0,这意味着所有操作都以其默认值运行 正常速度。如果设置不同的速度,时间似乎会运行得更快 或对于在节点及其子体上执行的所有操作,速度较慢。 例如,如果将“速度”值设置为2.0,则操作的运行速度将加倍 快

场景-暂停

如果该值为“是”,则跳过该节点(及其所有子节点) 当场景处理动作时

SKPhysicsWorld-速度

默认值为1.0,这意味着模拟以正常速度运行 速度默认值以外的值会更改此时的速率 通过物理模拟。例如,速度值为2.0 表示物理模拟中的时间以两倍于 场景的模拟时间。值为0.0将暂停物理过程 模拟


我正在测试iOS 8。。。这是暂时的,fps在一秒钟或更短的时间内变得稳定。。。是的,当暂停场景并使用附加的BOOL属性来控制更新:执行时,我得到了很好的效果。我没有尝试过的是使用(physicsWorld的)速度属性。。。我会试试那个,然后告诉你结果……不,我看不出有什么不同。请注意,即使是空项目也会发生这种情况,而不仅仅是在游戏中(在游戏中使用动作)。我想我可以在雷达上找到这个,以防万一。我想这与Spritekit的“预热”和“引擎”有关(如您所述,当取消暂停视图时)。至少暂停场景的效果与预期的一样。谢谢你的回答。@Whirlwind啊,那太糟糕了。稍后我将尝试进行测试,看看是否可以提出不同的解决方案。我也可以尝试在iOS 9上运行,如果他们修复了,我会告诉你。如果你这样做的话,那就太好了。谢谢