在 Spritekit 中取消暂停视图时 fps 显着下降

Significant fps drops when unpausing the view in Spritekit

我注意到在 SpriteKit 中取消暂停视图时 fps 明显下降(帧率下降 5-10fps)。我用空项目(Spritekit 游戏模板)试过这个。这是代码:

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

如果我暂停场景,一切都会按预期进行,帧稳定在 60fps。我正在设备上对此进行测试。

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

这可能会在取消暂停时导致游戏玩法出现问题,因为某些帧会被跳过...知道发生了什么事吗?

我假设它在取消暂停后会暂时下降?或者在取消暂停后它总是低帧率。这只发生在 iOS 8 或 iOS 9 上吗?你可以试试 iOS 9 吗?我相信这可能会发生,因为在取消暂停后它需要 Sprite-Kit 一点点到 "warm-up" 渲染周期。您可以尝试在仪器中进行分析,看看发生了什么。

至于解决方案,您可以尝试在取消暂停后暂时降低 SKPhysicsWorldspeed,这样物理就不会跳跃,因为 Sprite Kit 的时间步长可变,不幸的是不能改变。如果是跳跃的动作,您可以尝试降低 SKScenespeed。理想情况下,您应该两者都做。

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

除此之外,除了尝试为丢帧做准备外,您真的没有什么可以解决的。如果您还没有,一定要向 Apple 报告。

以下是所有这些属性的 class 参考。

SKView-暂停

If the value is YES, the scene’s content is fixed onscreen. No actions are executed and no physics simulation is performed.

SKScene - 速度

The default value is 1.0, which means that all actions run at their normal speed. If you set a different speed, time appears to run faster or slower for all actions executed on the node and its descendants. For example, if you set a speed value of 2.0, actions run twice as fast.

SKScene - 暂停

If the value is YES, the node (and all of its descendants) are skipped when a scene processes actions.

SKPhysicsWorld - 速度

The default value is 1.0, which means the simulation runs at normal speed. A value other than the default changes the rate at which time passes in the physics simulation. For example, a speed value of 2.0 indicates that time in the physics simulation passes twice as fast as the scene’s simulation time. A value of 0.0 pauses the physics simulation.