我正在使用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语句和上面的移动,但在我看来,这有点让事情变得复杂。
关于暂停场景时如何显示“恢复”按钮的任何建议?
答案 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}}