我正在使用 xCode 开发一款基于 SpriteKit/Swift 的 iOS 游戏,目前正在尝试动画。
我创建了一个类 PlayerSprite
作为 SKSpriteNode
的子类,并定义了一个方法 moveRight
运行以下操作:
run(
SKAction.moveBy(x: 32.0, y: 0.0, duration: 0.25), completion: {
debugPrint("Action completed.")
}
)
PlayerSprite
类只有一个玩家实例,它是节点树的一部分(SKScene -> SKTileMap -> PlayerSprite)。关键是,上述操作没有可靠地执行:
- 当我“第一次”启动应用程序时,它就会被执行。
- 当我停止应用程序并再次启动它时,它不会被执行。
- 当我在调试器中按“暂停”然后再次“播放”时,就会执行该操作!
这适用于模拟器以及在连接的 iPhone 上启动应用程序。停止应用程序是指按下 xCode 中的停止按钮并从 xCode 中再次开始运行它。
更新循环是SKScene
子类的一部分(在本例中称为LevelSceneView
),看起来像这样(到目前为止只是玩玩):
override func update(_ currentTime: TimeInterval) {
debugPrint("Update called")
if !player.hasActions() {
player.moveRight()
}
}
更新循环被正确调用,但操作未执行(根据日志控制台)。
有人经历过这样的行为吗?任何想法将不胜感激。我希望我已经充分描述了这个问题。如有任何疑问,请随时询问。
最佳答案
所以如果我理解正确的话,动画并不总是运行?不久前我确实在使用 xCode 9 时遇到了这样的问题。我解决这个问题的方法是切换场景的 isPaused 属性。因此,在更新调用结束时,我有两行代码,如下所示:
self.isPaused = true
self.isPaused = false
这样,每次调用 update() 时,场景都会暂停然后暂停。使用这个之后我在运行动画时再也没有遇到过问题。希望这有助于解决这个问题。
关于ios - SpriteKit 动画未可靠执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53139989/