在Spritekit中取消暂停视图时,重要的fps会下降

时间:2015-07-17 08:20:10

标签: 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;
    }

如果我暂停场景,一切都按预期工作,帧数稳定在60fps。我正在设备上测试它。

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

这可能会导致游戏玩法失效时出现问题,因为某些帧会被跳过...有什么想法会发生什么?

1 个答案:

答案 0 :(得分:1)

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

至于解决方案,您可以尝试在取消暂停后临时降低speed SKPhysicsWorld,因此物理不会跳跃,因为Sprite Kit有一个可变的时间步长,不幸的是,它可以'改变。如果是跳跃的动作,您可以尝试降低speed的{​​{1}}。理想情况下,你应该做两件事。

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

除此之外,除了尝试为丢弃的帧做准备之外,除了尝试准备这个之外,你真的没有别的办法来解决这个问题。如果您还没有,请务必向Apple报告。

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

SKView-暂停

  

如果值为YES,则场景的内容在屏幕上固定。没有行动   执行并且不执行物理模拟。

SKScene - 速度

  

默认值为1.0,表示所有操作都在其中运行   正常的速度。如果设置不同的速度,时间似乎运行得更快   对于在节点及其后代上执行的所有操作,或者更慢。   例如,如果将速度值设置为2.0,则操作将运行两次   快。

SKScene - 暂停了

  

如果值为YES,则跳过节点(及其所有后代)   当场景处理动作时。

SKPhysicsWorld - 速度

  

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