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

Когато потребител влезе във фонов режим (двойно докосване на началния бутон) или получи обаждане, играта продължава във фонов режим. Следователно резултатът се увеличава, докато те продължават с играта. Трябва да знам как да направя пауза или да спра играта, когато влязат във фонов режим или получат обаждане. Приложението ми е в 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