我正在努力实现以下目标
我在模型中使用的函数执行以下操作:
- (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;
}
控制器在模型启动时调用并设置视图功能,并分别结束声音文件NO和YES。
我面临的问题是,我的CCMenuItems上的触摸似乎在播放音频时排队 - 这意味着当声音文件完成时,每次触摸都会被注册和处理。在我的waitForAudio函数仍在循环时,有没有办法让我停止排队?
答案 0 :(得分:0)
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];
}