SpriteKit - 暂停输入

Posted

技术标签:

【中文标题】SpriteKit - 暂停输入【英文标题】:SpriteKit - Pause input 【发布时间】: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 中暂停场景的最佳做法,如果没有,在游戏暂停时暂停输入的最佳方式是哪种方式。

【问题讨论】:

【参考方案1】:

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

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

var isGamePaused = false

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

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

guard !isGamePaused else  return 

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

【讨论】:

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

我会建议部分解决方案:

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

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

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

【讨论】:

以上是关于SpriteKit - 暂停输入的主要内容,如果未能解决你的问题,请参考以下文章

SpriteKit 暂停和恢复 SKView

暂停 spritekit 场景并显示“暂停”标签

“点击恢复”暂停文本 SpriteKit

SpriteKit - didBecomeActive 时不显示暂停屏幕

暂停 SpriteKit 游戏 - UIApplicationWillResignActive 与 UIApplicationDidBecomeActive?

使用 SpriteKit 时如何暂停声音