在 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" 渲染周期。您可以尝试在仪器中进行分析,看看发生了什么。
至于解决方案,您可以尝试在取消暂停后暂时降低 SKPhysicsWorld
的 speed
,这样物理就不会跳跃,因为 Sprite Kit 的时间步长可变,不幸的是不能改变。如果是跳跃的动作,您可以尝试降低 SKScene
的 speed
。理想情况下,您应该两者都做。
此外,如果您只需要担心操作,您可以尝试只暂停场景而不是 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.
我注意到在 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" 渲染周期。您可以尝试在仪器中进行分析,看看发生了什么。
至于解决方案,您可以尝试在取消暂停后暂时降低 SKPhysicsWorld
的 speed
,这样物理就不会跳跃,因为 Sprite Kit 的时间步长可变,不幸的是不能改变。如果是跳跃的动作,您可以尝试降低 SKScene
的 speed
。理想情况下,您应该两者都做。
此外,如果您只需要担心操作,您可以尝试只暂停场景而不是 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.