有目的地降低SpriteKit帧速率

4

是否有可能故意降低SpriteKit场景的FPS? 我在想,如果这样做可以使我的游戏调试更加容易。

2个回答

6
您还可以尝试其他方法(此为crashoverride777答案的补充),通过减速节点或物理效果实现:

使节点进入慢动作状态(每个节点都可以这样做):

self.speed = 0.2 //where self is a scene

或者用物理学做同样的事情:
self.physicsWorld.speed = 0.2 //where self is a scene

这不是一个健壮的解决方案。特别是当你在游戏中有粒子和大量的精灵时(循环遍历精灵可能会影响性能)。但还是感谢你的回答。 - GeneCode
你为什么要循环遍历精灵以减慢它们的速度?你可以改变它们的父级对象的速度或者改变场景的速度。@GeneCode - Whirlwind
此方法还可以让您分别减缓物理世界、完整的节点树或单个节点的速度。 - Whirlwind
1
@GeneCode 我的意思是,SKEmittetNode 上有一个叫做 particleSpeed 的属性,但这也会改变你的粒子行为。 - Whirlwind
1
@GeneCode 我根据你的问题发布了一个相关问题,你可能想要跟踪一下它。http://stackoverflow.com/q/41805786/3402095 - Whirlwind
显示剩余4条评论

4
您可以在从GameViewController加载第一个场景时更改SKViewFPS值。
例如:
if #available(iOS 10.0, *) { 
     skView.preferredFramesPerSecond = 30 // 30 FPS 
} else {
     skView.frameInterval = 2 // Deprecated (1 default = 60FPS so 2 would = 30 FPS)
     skView.preferredFrameRate = ... // Deprecated
}

像Whirlwind在他的答案中所指出的那样:

"而且,这不会减慢任何内容,你只是跳过你所看到的帧,例如,如果你有一个节点从点A移动到点B需要5秒钟,而你将preferredFrameRate更改为30fps,那么该节点仍然会在5秒钟内从A移动到B,而不是10秒钟。你唯一能看到的变化就是跳过了一些帧。"

SKView API参考在这里


好的答案。此外,当前的SKView类已经解释了frameInterval已被弃用:/* 已弃用,请使用preferredFramesPerSecond。 跳过渲染之间的帧数,默认为1(每帧渲染) 实际请求的速率将是preferredFramesPerSecond / frameInterval。*/ @available(iOS,introduced: 7.0,deprecated: 10.0) open var frameInterval:Int - Alessandro Ornano
1
@GeneCode 从Alessandro的评论中可以看出,此属性仅适用于iOS 10及以上版本,因此如果您的部署目标小于10,则必须使用类似于if #available(iOS 10.0, *) {...}的东西。此外,这不会减慢任何速度,您只需跳过您正在查看的帧,例如,节点从点A移动到点B需要5秒钟,您将首选帧速率更改为30fps,该节点仍将在5秒钟内从A移动到B,而不是10秒钟。您唯一看到的变化是跳过了一些帧。 - Whirlwind
嘿,谢谢你的评论。我会更新我的答案。 - crashoverride777

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接