Как мне перестать касаться очереди? - PullRequest
0 голосов
/ 15 сентября 2011

Я пытаюсь добиться следующего

  1. Пользователь нажимает CCMenuItem
  2. Воспроизвести звуковой файл (я установил его как фоновую музыку, чтобы проверить, воспроизводится ли он)
  3. Отключить касание всех CCMenuItem
  4. Дождаться завершения воспроизведения звукового файла
  5. После завершения включения звукового файла повторно включить касание всех CCMenuItems

ФункцияЯ использую функцию wait в моей модели:

- (void) waitForAudio
{
    while ([[SimpleAudioEngine sharedEngine] isBackgroundMusicPlaying]) {
        NSLog(@"Waiting for audio to finish");
    }
}

В моем представлении есть следующая функция:

-(void) setPlaygroundAsTouchable:(BOOL)touchable
{
    [_menuItem0 setIsEnabled:touchable];
    [_menuItem1 setIsEnabled:touchable];
    [_menuItem2 setIsEnabled:touchable];

    _menu.isTouchEnabled=touchable;
}

Контроллер вызывает и устанавливает функцию представления при запуске моей моделии заканчивает звуковой файл НЕТ и ДА соответственно.

Проблема, с которой я сталкиваюсь, заключается в том, что касания моих CCMenuItems, кажется, ставятся в очередь во время воспроизведения моего аудио, что означает, что каждое касание регистрируется и обрабатывается, когдазвуковой файл завершен.Есть ли у меня способ остановить очередь касаний, пока моя функция waitForAudio все еще находится в цикле?

1 Ответ

0 голосов
/ 16 сентября 2011

функция waitForAudio блокировала основной поток, и, таким образом, касания были поставлены в очередь. Это был неправильный способ выяснить, когда заканчивается аудиофайл. В следующем фрагменте кода показан правильный способ прослушивания для завершения воспроизведения аудиофайла (Credit: toadkick Source link .)

[[CDAudioManager sharedManager] setBackgroundMusicCompletionListener:self selector:@selector(musicFinished)];
[[SimpleAudioEngine sharedEngine] playBackgroundMusic:@"someMusic.mp3" loop:NO];
[self setPlaygroundAsTouchable:NO];

-

-(void)musicFinished
{
    [[CDAudioManager sharedManager] setBackgroundMusicCompletionListener:nil selector:nil];
    [self setPlaygroundAsTouchable:YES];
}
...