iOS:Fire方法逐渐加快速度

时间:2012-12-28 03:30:09

标签: objective-c ios cocoa-touch gamekit

我的游戏每秒播放滴答声。我希望声音在整个游戏中慢慢加速。我最初的想法是使用NSTimer并在方法触发时更新速度,如下所示:

static float soundDelay = 1.0;
timer = [NSTimer scheduledTimerWithTimeInterval:clickClackDelay
                                                     target:self
                                                   selector:@selector(playSound)
                                                   userInfo:nil
                                                    repeats:YES];

- (void)playSound {
    soundDelay -= 0.1;
    NSLog(@"Play sound");
}

这不起作用,似乎NSTimer并不是真正意味着以这种方式使用。关于如何实现这一目标的任何其他建议?

3 个答案:

答案 0 :(得分:1)

请勿使用相同的计时器反复拨打-playSound。相反,使用计时器调用方法一次,然后创建一个具有较短延迟的新计时器。例如,您可以在-playSound本身创建计时器,以便每次调用-playSound时都会创建一个新的计时器。

答案 1 :(得分:1)

您可以通过从自身调用playSound方法来实现它。 您可以通过以下方式完成此操作。

- (void)playSound
{
   static float soundDelay = 1.0;
   if([timer isValid])
   {
     [timer invalidate];
     timer = nil;
   }
   timer = [NSTimer scheduledTimerWithTimeInterval:clickClackDelay
                                                     target:self
                                                   selector:@selector(playSound)
                                                   userInfo:nil
                                                    repeats:NO];
    soundDelay -= 0.1;
    if(soundDelay <=0)   //when sound delay is zero invalidate timer
    {
       [timer invalidate];
       timer = nil;
    }
    NSLog(@"Play sound");
}

答案 2 :(得分:0)

您应该为此目的重新安排另一个计时器。

- (void)playSound {
    static float soundDelay = 1.0;
    [NSTimer scheduledTimerWithTimeInterval:soundDelay
                                                     target:self
                                                   selector:@selector(playSound)
                                                   userInfo:nil
                                                    repeats:NO];
    if (soundDelay > 0.1) {
        soundDelay -= 0.1;
    }
    NSLog(@"Play sound");
}

P.S。您可能想要添加终止条件。