создание таймера для уровня в игре iphone - PullRequest
0 голосов
/ 29 марта 2012

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

bool showTimer = YES;
NSDate startDate;
UILabel timerLabel; // initialized in viewDidLoad

    -(void) showElapsedTime: (NSTimer *) timer {
        if (showTimer) {
            NSTimeInterval timeSinceStart;

            if(!startDate) {
                startDate = [NSDate date]; 
            }

            timeSinceStart = [[NSDate date] timeIntervalSinceDate:startDate];
            NSString *intervalString = [NSString stringWithFormat:@"%.0f",timeSinceStart];
            timerLabel.text = intervalString;

            if(stopTimer) {//base case
                [timer invalidate];
            }
        }
    }

    - (void) startPolling {
        [NSTimer scheduledTimerWithTimeInterval:0.1f target:self selector:@selector(showElapsedTime:) userInfo:nil repeats:YES];
    }

Я запускаю метод startPolling в viewDidLoad. Когда я запускаю приложение, я вижу таймер, и он отслеживает время, но когда я выхожу из приложения и снова вхожу в него, таймер не останавливается. Я также не уверен, как справиться с переходом в другое представление (например, меню параметров), а затем возвращаться к этому представлению. Я понимаю NSDefaults и NSCoding и вижу, как можно сохранить текущее значение в таймере как объект кодирования, сохраняя отдельную пару ключ-значение в списке для каждого уровня, но это кажется громоздким.

Есть ли лучший способ отслеживать, сколько времени пользователь проводит на уровне?

1 Ответ

1 голос
/ 29 марта 2012

Вместо того, чтобы каждый раз вычислять (вычитать время начала из текущего времени), так как все, что вам нужно, это прошедшее время, просто используйте переменную типа NSTimeInterval elapsedTime, которую вы начинаете с 0 и добавляете время к каждому разу что таймер срабатывает. (Если вы хотите отследить его до 0,1 секунды, как в вашем примере, просто разделите на 10, прежде чем отобразить его.) Таким образом, вы можете приостановить его, когда захотите, и он просто продолжит работу с того места, где он был, когда снова запустится .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...