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 = false
isPaused = false
【讨论】:
好的,谢谢。我用 if 语句做到了,但使用 guard 听起来更好【参考方案2】:我会建议部分解决方案:
将所有与游戏相关的节点不直接添加到场景中,而是添加到中间的空 SKNode()(我通常将其命名为“playLayer”)。然后你可以方便地暂停它 playLayer.isPaused = true。 如果您需要一些与暂停相关的节点,请将它们添加到另一个 SKNode “pauseLayer”。
为了防止不需要的触摸事件,我添加了一个“pauseBackground”SKSpritenode(它可能几乎是透明的),与屏幕重叠。
场景类中指定的布尔变量 (var gameON = true) 也可以方便地用于由 UIGestureRecognizers 调用的函数中,以防止执行不需要的函数。
【讨论】:
以上是关于SpriteKit - 暂停输入的主要内容,如果未能解决你的问题,请参考以下文章
SpriteKit - didBecomeActive 时不显示暂停屏幕
暂停 SpriteKit 游戏 - UIApplicationWillResignActive 与 UIApplicationDidBecomeActive?