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

Я хотел бы измерить время, необходимое пользователю для выполнения задачи, как в игре. Это просто: получить NSDate начала и конца, а затем вычислить разницу.

Однако я хочу игнорировать время, которое приложение проводит в фоновом режиме, например, когда поступает телефонный звонок. Как мне это сделать? NSTimer — это (более или менее) будильник. Мне нужен секундомер.

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

Есть ли простой подход, который я упустил из виду?


person Joe Völker    schedule 08.09.2016    source источник


Ответы (1)


У вас есть игровой цикл, который будет работать в любой игре SpriteKit.

Когда игра поставлена ​​на паузу, игровой цикл приостанавливается.

Поэтому рассчитайте прошедшее время в каждом цикле и добавьте к накопленному времени.

person Fogmeister    schedule 08.09.2016
comment
Я не использую набор спрайтов. Игра продвигается только по пользовательскому вводу. Есть состояние запуска игры, но нет игрового цикла, кроме простого цикла событий vanilla Cocoa. - person Joe Völker; 08.09.2016
comment
@JoeVölker, в этом случае вы могли бы ответить, что приложение перешло в фоновое уведомление. Не рассматривайте игру как одно событие, а как серию из 1 или более событий, разделенных такими вещами, как приостановка игры, переход в фоновый режим и т. д., затем измерьте время для каждого события и сложите их вместе. - person Fogmeister; 08.09.2016