NSTimer стреляет мгновенно - PullRequest
       7

NSTimer стреляет мгновенно

3 голосов
/ 20 декабря 2011

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

Возможное решение: Я знаю, что я мог бы сделать это, установив таймер на повторение и установив первый вызов bool firstCall, а затем следующий интервал замирания,таймер недействителен, но я не думаю, что это хорошая практика

Вот так:

bool firstCall = false;
-(void)hideSprite{
        if(!firstCall){
        firstCall = true
    }else{
        //fade out sprite
        //Invalidate NSTimer
        //firstCall = false;
    }
}

Спасибо за вашу помощь!

Ответы [ 3 ]

2 голосов
/ 20 декабря 2011

Я подозреваю, что что-то еще звонит hideSprite. Код, который вы написали , будет заставлять таймер подождать пять секунд перед вызовом селектора hideSprite.

Предоставьте другой селектор (напишите новый метод тестирования, который просто делает NSLog) для таймера и посмотрите, что произойдет. Это скажет вам: а) действительно ли таймер срабатывает немедленно и б) если что-то еще вызывает hideSprite.

[NSTimer scheduledTimerWithTimeInterval:CALC_TIME target:self selector:@selector(testTimer) userInfo:nil repeats:NO];

-(void) testTimer { NSLog(@"Timer - and only the timer - called me."); }
-(void) hideSprite {
    NSLog(@"I definitely wasn't called by the timer.");
}
1 голос
/ 20 декабря 2011

Довольно часто проще просто использовать что-то вроде

[UIView animateWithDuration: 0 delay: 5 options:0 animations: nil completion:
^{
  // fade sprite
}];

(не уверен, что animations может быть нулем, но вы поняли).

0 голосов
/ 20 декабря 2011

Подумайте об инициализации вашего таймера, используя метод initWithFireDate:interval:target:selector:userInfo:repeats.Вот более подробный взгляд на NSTimer .

...