我在我的Spritekit游戏中添加了一个暂停按钮,暂停游戏:
@objc func pauseGame()
{
pauseButton?.isHidden = true
pauseMenu?.isHidden = false
gameScene?.isPaused = true // This is the main scene, which is supposed to be paused
}
按预期工作,但场景仍然通过触摸功能和手势识别器进行输入,并且在场景继续后,角色会进行各种动作,这是不应该做的。
所以,基本上我只是想知道,如果有一个最好的做法来暂停SpriteKit中的一个场景,如果没有,那么在游戏暂停时哪种方式也可以暂停输入。
答案 0 :(得分:0)
我所做的是为暂停状态创建一个变量
var isGamePaused = false
然后在暂停游戏时将变量设置为true
然后在更新功能和触摸功能中我放了一个警卫来检查游戏是否暂停
guard !isGamePaused else { return }
这样更新不会运行且场景没有接收到触摸。如果您要取消暂停场景,只需在设置场景isGamePaused = false
时设置isPaused = false
答案 1 :(得分:0)
我会建议部分解决方案:
不是将所有与游戏相关的节点直接添加到场景中,而是添加到中间的空 SKNode()(我通常将其命名为“playLayer”)。然后你可以方便地暂停它 playLayer.isPaused = 真。 如果你需要一些暂停相关的节点,你可以将它们添加到另一个 SKNode“pauseLayer”。
为了防止不需要的触摸事件,我添加了一个“pauseBackground”SKSpritenode(可能几乎是透明的),与屏幕重叠。
场景类中指定的 bool 变量 (var gameON = true) 也可以方便地在 UIGestureRecognizers 调用的函数中使用,以防止执行不需要的函数。