【发布时间】:2014-08-23 01:22:12
【问题描述】:
在这段代码中,Audio 是一个处理与AVAudioPlayer 相关的所有事情的类。目前有一些音乐正在播放。我想让它在 1 秒内完全淡出,然后播放另一首歌。同时,我想要一个新的场景出现。所以我希望新歌在过渡(也持续 1 秒)结束时立即开始。然而,我发现自己总是在场景转换开始之前等待音乐停止。我尝试了很多方法,有和没有选择器,有和没有各种睡眠功能,但没有任何运气。我也尝试过使用stopMusic 而不是transitionMusic,然后在新场景中使用playMusic:,但我总是发现自己在等待stopMusic 在过渡开始之前完成。
这是第一个场景的一部分,如果按下屏幕上的某个按钮,就会运行:
Audio *musicPlayer = [[Audio alloc] init];
NewScene *newScene = [NewScene sceneWithSize:self.size];
SKTransition *reveal = [SKTransition pushWithDirection:SKTransitionDirectionLeft duration:1.0];
reveal.pausesOutgoingScene = NO;
reveal.pausesIncomingScene = NO;
[self.view presentScene:newScene transition:reveal];
[musicPlayer transitionMusic:@"NewSong"];
方法transitionMusic:如下:
-(void)transitionMusic:(NSString *)fileName {
[self performSelectorOnMainThread:@selector(stopMusic) withObject:nil waitUntilDone:YES];
[self playMusic:fileName];
}
而stopMusic 和playMusic: 是:
-(void)stopMusic {
while(BGM.volume > 0.05) {
[BGM setVolume:(BGM.volume - 0.05)];
[NSThread sleepForTimeInterval:0.05];
}
[BGM stop];
}
-(void)playMusic:(NSString *)fileName {
NSURL * backgroundMusicURL = [[NSBundle mainBundle] URLForResource:[NSString stringWithFormat:@"%@",fileName] withExtension:@"caf"];
BGM = [[AVAudioPlayer alloc] initWithContentsOfURL:backgroundMusicURL error:nil];
[BGM setNumberOfLoops:-1];
[BGM setVolume:1.0];
[BGM prepareToPlay];
[BGM play];
}
另外,BGM 是在Audio.h 中声明的静态音频播放器。谁能指出我做错了什么?
【问题讨论】:
-
您可能想要做一个更简单的过渡,并在 didMoveToView 中进行淡入并在 runAction 调用中一起开始音乐。
-
@uchuugaka:自从你发表评论后,我编辑了我的帖子。我已经试过了。
标签: ios objective-c sprite-kit avaudioplayer