SpriteKit:在场景暂停时运行动作

Jos*_*ría 9 ios sprite-kit swift

我有一个按钮可以在我的代码上暂停游戏.我想要的是将游戏与该按钮暂停会发出一条消息,显示"已暂停".但是,由于场景暂停,因此不会显示该消息.

我现在拥有的是一个SKLabelNode,其开头的alpha值为0.0,当用户暂停游戏时,它会使用fadeInWithDuration()更改为1.0.然后当用户再次按下按钮时,它会使用fadeOutWithDuration()变回0.0.问题是当场景暂停时,带有fadeInWithDuration()的SKAction不会运行.

我怎么能实现这个目标?

cra*_*777 11

苹果在"DemoBots"中使用的最佳方法是创建一个暂停而不是场景的世界节点.

创建一个worldNode属性

class GameScene: SKScene {

    let worldNode = SKNode()
}
Run Code Online (Sandbox Code Playgroud)

将它添加到didMoveToView中的场景中

addChild(worldNode)
Run Code Online (Sandbox Code Playgroud)

然后将您需要的所有内容添加到worldNode.这包括通常由场景运行的动作(例如,计时器,敌人产卵等)

worldNode.addChild(someNode)
worldNode.run(someSKAction)
Run Code Online (Sandbox Code Playgroud)

比你在停顿时所说的那样

worldNode.isPaused = true
physicsWorld.speed = 0
Run Code Online (Sandbox Code Playgroud)

并在简历中

worldNode.isPaused = false
physicsWorld.speed = 1
Run Code Online (Sandbox Code Playgroud)

如果您在暂停时有想要忽略的内容,也可以在更新功能中添加额外的检查.

override func update(_ currentTime: CFTimeInterval) {

    guard !worldNode.isPaused else { return }

    // your code
}
Run Code Online (Sandbox Code Playgroud)

这样,当游戏暂停时,添加暂停的标签或其他UI会更加容易,因为您实际上并未暂停场景.除非将该操作添加到worldNode或worldNode的子级,否则您还可以运行所需的任何操作.

希望这可以帮助