2015-04-15 2 views
-1

Я кодирую игру в Spritekit. После того, как пользователь проиграет мою игру, я хочу создать способ для жизни пользователя, чтобы пополнить его через 30 минут. Я создал целое число (называемое Lives), и каждый раз, когда пользователь проигрывает игру, он вычитает 1 из целого числа Я просто не знаю, t знает, как пополнить жизнь пользователя через 30 минут. Я написал следующий код в классе помощников NSObject, но он не работает.Пополнение запасов за 30 минут

-(void)ReplenishLives{ 
    NSDate *now = [NSDate date]; 
    NSTimeInterval oldDateTimeInterval = [now timeIntervalSinceReferenceDate]; 
    NSTimeInterval thirtyMinutes = 60 * 30; 
    if (oldDateTimeInterval > thirtyMinutes) { 
     Lives = 5; 
    } 
} 

-(void)CheckTime{ 
    LifeTimer = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(ReplenishLives) userInfo:nil repeats:YES]; 
} 
+0

Вам необходимо сохранить исходный (старый) oldDateTimeInterval. В вашей текущей форме вы вычитаете текущее «старое» с текущего времени. Изучите использование NSUserDefaults, чтобы сохранить начальное значение времени и сравнить его с текущим. – sangony

ответ

1

Одной из основных проблем является то, что вы рассчитываете oldDateTimeInterval быть что-то другое, чем в прошлый раз, когда пользователь потерял (а именно, вы устанавливаете его равным интервалу времени между сейчас и 1 января 2001 г., 12:00 мск). timeIntervalSinceReferenceDate дает вам время с 1 января 2001 года, в 12:00 пополудни, что вы не хотите.

Я бы порекомендовал использовать NSLog(), чтобы записать ваш oldDateTimeInterval и убедиться, что он работает так, как вы этого хотите. Это напечатает все, что вы разместите внутри консоли. Например:

NSLog(@"old time interval %f", oldDateTimeInterval); 

Тогда, что вы, вероятно, хотите сделать, это сохранить NSDate переменной (может быть, в NSUserDefaults), который будет держать в последний раз, когда пользователь потерял свою игру. Затем вы можете провести сравнение с этой датой вместо того, что вам сейчас не подходит.

+0

Я пробовал это, но NSLog не печатает временной интервал при запуске приложения. – John

+0

Вы поставили точку останова в этом методе, чтобы убедиться, что код действительно выполняется? NSLog никогда не подведет вас, так что там что-то происходит. –

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