iOS: метод Огня на постепенно увеличивающейся скорости

Моя игра играет тикающий звук часов каждую секунду. Я хотел бы, чтобы звук медленно убыстрился всюду по игре. Моя начальная буква думала, должен был использовать 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 действительно не предназначен, чтобы использоваться тот путь. Какие-либо другие предложения о том, как я мог достигнуть этого?

1
добавлено отредактировано
Просмотры: 2
I' m не верный it' s возможный, для какой you' ре, определенно продолжающее работать, но как насчет рекурсии?
добавлено автор KG Christensen, источник

7 ответы

Можно осуществить его, звоня 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");
}
1
добавлено
Этот isn' t рекурсия (хотя it' s хорошее решение).
добавлено автор rmaddy, источник
@rmaddy: спасибо за ваш комментарий. I' ll изменяют слово.
добавлено автор Midhun MP, источник

Можно осуществить его, звоня 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");
}
1
добавлено
Этот isn' t рекурсия (хотя it' s хорошее решение).
добавлено автор rmaddy, источник
@rmaddy: спасибо за ваш комментарий. I' ll изменяют слово.
добавлено автор Midhun MP, источник

Можно осуществить его, звоня 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");
}
1
добавлено
Этот isn' t рекурсия (хотя it' s хорошее решение).
добавлено автор rmaddy, источник
@rmaddy: спасибо за ваш комментарий. I' ll изменяют слово.
добавлено автор Midhun MP, источник

Не используйте тот же самый таймер, чтобы звонить -playSound неоднократно. Вместо этого используйте таймер, чтобы назвать метод однажды, и впоследствии создать новый таймер с более короткой задержкой. Например, вы могли создать таймер в -playSound сам, так, чтобы новый таймер был создан, каждый раз -playSound называют.

1
добавлено
Вы были первыми с правильным ответом. Казалось бы, что никакой код не означает lovin'.:)
добавлено автор rmaddy, источник

Необходимо перенести другой таймер с этой целью.

- (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. можно хотеть добавить заканчивающееся условие.

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. можно хотеть добавить заканчивающееся условие.

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. можно хотеть добавить заканчивающееся условие.

0
добавлено
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

iOS Developers — русскоговорящее сообщество
iOS Developers — русскоговорящее сообщество
2 245 участник(ов)

Общаемся на темы, посвященным iOS-разработке, Swift, Objective-C, SDK, Rx, Cocoa и т.д.