2015-07-18 2 views
0

У меня есть куча таймеров в моем GameScene.swift, которые вызывают функции. Как я могу приостановить эти таймеры, когда пользователь забирает или удваивает нажатие кнопки «домой», получает текстовое сообщение и т. Д.? Прямо сейчас, когда кнопка дома двойным нажатием, в то время как игра работает, счет, который основан на таймере, продолжает расти, и враги все еще порождаются.Приостановка таймеров при нажатии кнопки дома быстро

//Spawn timer for enemy blocks 
    var timer = NSTimer.scheduledTimerWithTimeInterval(0.4, target: self, selector: Selector("spawnEnemies"), userInfo: nil, repeats: true) 

    //Timer for keeping score 
    var scoretimer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: Selector("scoreCounter"), userInfo: nil, repeats: true) 

Любая помощь была бы принята с благодарностью!

EDIT: Я добавил эти две строки в моей GameViewController.swift

NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("pauseTimers:"), name:UIApplicationWillResignActiveNotification, object: nil) 

NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("startTimers:"), name:UIApplicationDidBecomeActiveNotification, object: nil) 

И тогда эти две функции:

func pauseTimers(notification : NSNotification) { 
    println("Observer method called") 
    timer.invalidate() 
    scoretimer.invalidate() 
} 

func startTimers(notification : NSNotification) { 
    println("Observer method called") 
    timer = NSTimer.scheduledTimerWithTimeInterval(0.4, target: self, selector: Selector("spawnEnemies"), userInfo: nil, repeats: true) 
    scoretimer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: Selector("scoreCounter"), userInfo: nil, repeats: true) 
} 

Однако я получаю сообщение об ошибке, потому что, когда я воссоздавать таймеры в startTimers их селектора - это функции в моем GameScene.swift, а не GameViewController.swift. Как я могу это исправить?

ответ

3

Вы можете остановить таймер, позвонив по телефону invalidate(). Хотя недействительный таймер никогда не будет запускаться снова, вам нужно его повторно создать позже, если вы хотите, чтобы он снова срабатывал.

Чтобы определить, когда ваше приложение проходит в фоновом режиме или прерывается, а также, когда он возвращается на передний план, вы можете слушать эти уведомления:

  • UIApplicationDidBecomeActiveNotification
  • UIApplicationWillResignActiveNotification
  • UIApplicationDidEnterBackgroundNotification
  • UIApplicationWillEnterForegroundNotification

Ап p «уходит в отставку», когда он закрыт, например. потому что поступает входящий вызов или открыт центр уведомлений/центр управления. Приложение переходит в фоновый режим, когда другое приложение выходит на передний план или когда отображается главный экран (что также технически является приложением).

enter image description here

@Update

Проблема заключается в том, что цель из таймеров self и когда вы находитесь в GameViewController, то self является GameViewController экземпляр. Вам необходимо либо воссоздать таймеры в пределах GameScene, либо вам необходимо передать ссылку на ваш GameScene экземпляр вместо self в качестве цели . Селектор - это метод, который вызывается, а цель - это объект, на который вызывается метод, и self всегда является текущим объектом.

BTW можно прослушивать эти уведомления в любом классе, а также в нескольких классах одновременно.

+0

Отредактировано мое начальное задание. У меня проблема с воссозданием таймеров после их недействительности. – Darkstar

+0

@Darkstar. На самом деле вы должны задать отдельный вопрос для этого, так как это другая проблема.Проблема в том, что целью ваших таймеров является 'self', а когда вы находитесь в' GameViewController', тогда 'self' является' GameViewController'. Вам нужно либо воссоздать таймеры в 'GameScene', либо вам нужно передать ссылку на ваш объект GameScene вместо' self' в качестве цели. Селектор - это метод, который вызывается, а целью является объект, на который вызывается метод, а 'self' всегда является текущим объектом. – Mecki

+0

Сделал новый вопрос. http://stackoverflow.com/questions/31495906/pausing-and-recreating-timers-with-notifications-issue-swift – Darkstar

Смежные вопросы