ios - SpriteKit 动画未可靠执行

标签 ios swift xcode sprite-kit

我正在使用 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)。关键是,上述操作没有可靠地执行:

  1. 当我“第一次”启动应用程序时,它就会被执行。
  2. 当我停止应用程序并再次启动它时,它不会被执行。
  3. 当我在调试器中按“暂停”然后再次“播放”时,就会执行该操作!

这适用于模拟器以及在连接的 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/

相关文章:

iOS 使用刷新的身份验证 token 处理请求

arrays - 快速创建唯一数组 [Int] 的数组

ios - 一对多关系的 NSBatchUpdateRequest

ios - 在 Swift 中检查 NSCFBoolean 吗?

ios - UICollectionView 不随大小类缩放

ios - Sprite-Kit是否会使图像更大?

ios - 删除弹出 View Controller -swift

xcode - 二元运算符 != 不能应用于 NSUrlConnection!.Type 和 NilLiteralConvertible 类型的操作数

ios - 在 Swift 中将参数传递给操作函数

ios - 如何使用 react-native cli 构建 react-native 应用程序?