SpriteKit - 暂停输入

时间:2018-03-06 20:42:15

标签: swift sprite-kit

我在我的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中的一个场景,如果没有,那么在游戏暂停时哪种方式也可以暂停输入。

2 个答案:

答案 0 :(得分:0)

暂停现场并不会阻止输入,正如您已经发现的那样。它只能阻止动画,声音和动作的运行。

我所做的是为暂停状态创建一个变量

var isGamePaused = false

然后在暂停游戏时将变量设置为true

然后在更新功能和触摸功能中我放了一个警卫来检查游戏是否暂停

guard !isGamePaused else { return }

这样更新不会运行且场景没有接收到触摸。如果您要取消暂停场景,只需在设置场景isGamePaused = false时设置isPaused = false

答案 1 :(得分:0)

我会建议部分解决方案:

  1. 不是将所有与游戏相关的节点直接添加到场景中,而是添加到中间的空 SKNode()(我通常将其命名为“playLayer”)。然后你可以方便地暂停它 playLayer.isPaused = 真。 如果你需要一些暂停相关的节点,你可以将它们添加到另一个 SKNode“pauseLayer”。

  2. 为了防止不需要的触摸事件,我添加了一个“pauseBackground”SKSpritenode(可能几乎是透明的),与屏幕重叠。

  3. 场景类中指定的 bool 变量 (var gameON = true) 也可以方便地在 UIGestureRecognizers 调用的函数中使用,以防止执行不需要的函数。