1

我的游戏每秒播放一次滴答作响的时钟声。我希望声音在整个游戏过程中慢慢加快。我最初的想法是使用 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 并不是真的要以这种方式使用。关于我如何做到这一点的任何其他建议?

4

3 回答 3

1

不要使用同一个定时器-playSound重复调用。相反,使用计时器调用该方法一次,然后创建一个具有更短延迟的新计时器。例如,您可以-playSound自己创建计时器,以便每次-playSound调用时都会创建一个新计时器。

于 2012-12-28T03:42:42.447 回答
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");
}
于 2012-12-28T03:49:34.113 回答
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");
}

ps 你可能想添加一个终止条件。

于 2012-12-28T03:48:19.097 回答