暂停SpriteKit游戏 - UIApplicationWillResignActive与UIApplicationDidBecomeActive?

时间:2017-06-30 20:44:38

标签: ios swift sprite-kit

我理解这两种方法之间的差异,但我想知道在执行诸如暂停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()

}

1 个答案:

答案 0 :(得分:2)

<强>暂停

这是关于applicationWillResignActive方法的文档:

  

您应该使用此方法暂停正在进行的任务,禁用计时器和   降低OpenGL ES帧速率。游戏应该使用这种方法   暂停比赛。处于非活动状态的应用程序应该执行最少的工作   而它等待转换到活动或背景状态。

所以这个方法适用于暂停游戏。

<强>取消暂停操作

iirc,当应用从非活动状态转换为活动状态时,游戏应自动取消暂停。这是调用applicationDidBecomeActive方法的时刻,所以在某些情况下你可能想在这里暂停游戏......但这取决于你的游戏。

我不知道为什么你提到applicationDidBecomeActive&amp;的组合? applicationDidEnterBackground暂停/取消暂停...因为在applicationDidEnterBackground暂停游戏可能为时已晚,从技术上讲,不需要在applicationDidBecomeActive中取消暂停游戏,因为这是自动完成的。