在SpriteKit上暂停游戏场景后尝试显示恢复按钮

时间:2017-01-16 19:32:23

标签: sprite-kit swift3 xcode8 resume pause

我正在使用Xcode 8和Swift 3,试图在暂停游戏后在我的场景中显示“恢复游戏”按钮,但由于一切都停止了,我还没有找到正确的方法。我在此页Mike上遵循了“Tap To Resume” Pause text SpriteKit的建议,但这没有用。

点击暂停按钮后,它会使用以下代码运行暂停功能:

func pauseGame() {
    self.isPaused = true
    self.physicsWorld.speed = 0
    self.speed = 0.0
    self.scene?.view?.isPaused = true
}

这可能看起来有点矫枉过正但是有效。如果我删除

self.scene?.view?.isPaused = true

从我的暂停功能,我能够显示点击恢复按钮,但我仍然可以与场景中的一些SpriteKit节点进行交互。我正在进行太空射击游戏,所以用户仍然可以移动刺激并点击射击,虽然子弹不会旅行直到我恢复现场。

我考虑过添加一个布尔值" true"到暂停功能并向触发器添加一个IF语句和上面的移动,但在我看来,这有点让事情变得复杂。

关于暂停场景时如何显示“恢复”按钮的任何建议?

2 个答案:

答案 0 :(得分:2)

您无法与场景中的任何节点进行交互,因为您已完全暂停它,这会暂停其所有子节点,这就是场景中的所有内容。为避免这种情况,请仅暂停某些SKNode s(图层)。

将某些节点添加到不同的SKNode,因此您只能暂停要暂停的图层(SKNode)而不是暂停整个场景(gameLayer)。它看起来像这样:

初始化节点

let gameLayer = SKNode() 
let pauseLayer = SKNode()

现在,当您想要将子项添加到场景中时,请将其添加到您希望它成为其中一部分的图层中:

将子节点添加到主要图层

gameLayer.addChild(gameSceneNode)
pauseLayer.addChild(resumeButton)

不要忘记将图层添加到场景中

将图层添加到场景中

addChild(gameLayer)
addChild(pauseLayer)

要暂停图层,请写下:

gameLayer.isPaused = true

请注意,在此示例中,gameLayer上的所有节点都将暂停,但pauseLayer上的所有节点都不会。

您的完整示例可能如下所示:

func pauseGame() {

    gameLayer.isPaused = true
    pauseLayer.isHidden = false
    gameLayer.physicsWorld.speed = 0
    gameLayer.speed = 0.0

}

func unpauseGame() {

    gameLayer.isPaused = false
    pauseLayer.isHidden = true
    // Whatever else you need to undo

}

答案 1 :(得分:1)

对于我的下一场比赛,我确定我会试试Nik的建议。至于我上面的问题,它使用下面显示的代码。附加代码也是关闭暂停按钮。现在这个工作我可以在两个按钮上添加一个fadeIn和fadeOut动作。

{{1}}