我理解这两种方法之间的差异,但我想知道在执行诸如暂停SpriteKit游戏之类的事情时,使用UIApplicationWillResignActive而不是UIApplicationDidBecomeActive(或UIApplicationDidEnterBackground)是否存在缺点。我一直在浏览网站上的线程,并注意到通常在回答询问如何暂停SpriteKit游戏的问题时,建议使用UIApplicationDidBecomeActive和UIApplicationDidEnterBackground而不是UIApplicationWillResignActive。由于UIApplicationWillResignActive还会暂停游戏以响应Siri / Calls,在处理暂停SpriteKit游戏时这不是更好的方法吗?或者使用它有什么不利之处?
下面我有我的通知和暂停功能:
NotificationCenter.default.addObserver(self, selector: #selector(self.pauseGame), name:NSNotification.Name.UIApplicationDidBecomeActive, object: nil)
//OR
NotificationCenter.default.addObserver(self, selector: #selector(self.pauseGame), name:NSNotification.Name.UIApplicationWillResignActive, object: nil)
暂停功能:
func pauseGame(){
print(self.scene?.isPaused)
if sceneIsPaused == true || isGameOver == true{
return
}
leftMobGenTimer.invalidate()
rightMobGenTimer.invalidate()
genDragonTimer.invalidate()
checkNinjaTimer.invalidate()
chiStrikeTimer.invalidate()
randCoinTimer.invalidate()
print("Timer stopped?")
if soundEnabled == true{
player.pause()
}
self.scene?.isPaused = true
sceneIsPaused = true
makePauseView()
}
答案 0 :(得分:2)
<强>暂停强>
这是关于applicationWillResignActive方法的文档:
您应该使用此方法暂停正在进行的任务,禁用计时器和 降低OpenGL ES帧速率。游戏应该使用这种方法 暂停比赛。处于非活动状态的应用程序应该执行最少的工作 而它等待转换到活动或背景状态。
所以这个方法适用于暂停游戏。
<强>取消暂停操作强>
iirc,当应用从非活动状态转换为活动状态时,游戏应自动取消暂停。这是调用applicationDidBecomeActive
方法的时刻,所以在某些情况下你可能想在这里暂停游戏......但这取决于你的游戏。
我不知道为什么你提到applicationDidBecomeActive
&amp;的组合? applicationDidEnterBackground
暂停/取消暂停...因为在applicationDidEnterBackground
暂停游戏可能为时已晚,从技术上讲,不需要在applicationDidBecomeActive
中取消暂停游戏,因为这是自动完成的。