Как приостановить или остановить игру набора спрайтов, когда пользователь входит в фоновый режим или получает вызов

Когда пользователь входит в фоновый режим (дважды нажимает кнопку «Домой») или получает вызов, игра продолжается в фоновом режиме. Следовательно, счет увеличивается, пока они продолжают игру. Мне нужно знать, как приостановить или остановить игру, когда они переходят в фоновый режим или получают вызов. Мое приложение находится в Swift 3, Xcode 8.


person Sufyaan Ibrahim    schedule 24.08.2017    source источник


Ответы (3)


Как сказал Джон, вам нужно приостановить игру... но для этого вам нужна ссылка на экземпляр/объект игровой сцены. Вот статическая ссылка, которую вы можете использовать в своем AppDelegate:

class GameScene: SKScene {

  static var sharedInstance = GameScene()

  override func didMove(to view: SKView) {
    sharedInstance = self
  }
}

Затем в функциях AppDelegate вы можете использовать:

GameScene.sharedInstance.isPaused = true // or false
person Fluidity    schedule 25.08.2017

В AppDelegate.swift Xcode по умолчанию помещает метод с именем applicationWillResignActive. Это то, что вы должны увидеть, если вы не отредактировали или не удалили метод:

func applicationWillResignActive(_ application: UIApplication) {
    // ...
}

Из шаблона Xcode...

Отправляется, когда приложение собирается перейти из активного в неактивное состояние. Это может происходить при определенных типах временных прерываний (таких как входящий телефонный звонок или SMS-сообщение) или когда пользователь выходит из приложения, и оно начинает переход в фоновое состояние. Используйте этот метод, чтобы приостановить текущие задачи, отключить таймеры и сделать недействительными обратные вызовы рендеринга графики. Игры должны использовать этот метод для приостановки игры.

Поскольку этот метод вызывается непосредственно перед тем, как игра становится неактивной, я предлагаю использовать этот метод, чтобы распознать, что ваша игра была приостановлена. Вы можете поместить в этот метод любой код, который вам нужен, чтобы фактически приостановить определенные задачи вашей игры.

Надеюсь это поможет!

person JohnV    schedule 25.08.2017

Вы должны приостановить игру в applicationWillResignActive:

Этот метод следует использовать для приостановки текущих задач, отключения таймеров и снижения частоты кадров OpenGL ES. Игры должны использовать этот метод для приостановки игры. Приложение в неактивном состоянии должно выполнять минимальную работу, пока оно ожидает перехода в активное или фоновое состояние.

В момент разговора (раньше этого не было), когда вы возвращаетесь из фона, т.е. вернуться в активное состояние, сцена автоматически возобновится. Иногда это желаемое поведение, иногда нет.

Например, иногда вы хотите, чтобы ваша игра оставалась на паузе, когда пользователь возвращается из фона. В этом случае вы отправите уведомление из соответствующего метода AppDelegate. Затем вы поймаете это уведомление в GameScene и предпримете необходимые действия (например, снова приостановите игру или приостановите мировой узел и отобразите над ним всплывающее окно, чтобы позволить пользователю продолжить, когда он захочет...)

Пауза тоже происходит автоматически. Когда вы переходите на задний план, сцена приостанавливается. Вам действительно не нужно ничего делать, если вы просто хотите, чтобы ваша сцена оставалась на паузе.

person Whirlwind    schedule 25.08.2017