我的游戏每秒播放滴答声。我希望声音在整个游戏中慢慢加速。我最初的想法是使用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并不是真正意味着以这种方式使用。关于如何实现这一目标的任何其他建议?
答案 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。您可能想要添加终止条件。