【问题标题】:SpriteKit - Pause inputSpriteKit - 暂停输入
【发布时间】:2018-03-06 20:42:14
【问题描述】:

我在我的 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 中暂停场景的最佳做法,如果没有,在游戏暂停时暂停输入的最佳方式是哪种方式。

【问题讨论】:

    标签: swift sprite-kit


    【解决方案1】:

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

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

    var isGamePaused = false
    

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

    然后在 update func 和 touches funcs 中我设置了一个守卫来检查游戏是否暂停

    guard !isGamePaused else { return }
    

    这样更新不会运行并且场景不会收到触摸。当你想取消暂停场景时,只需在设置场景时设置isGamePaused = falseisPaused = false

    【讨论】:

    • 好的,谢谢。我用 if 语句做到了,但使用 guard 听起来更好
    【解决方案2】:

    我会建议部分解决方案:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-25
      • 1970-01-01
      • 2017-06-17
      • 2016-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多