每当我呈现我的场景时,我都想开始播放音乐文件,并在上一次呈现场景时停止播放音乐。我试图这样做。
[self removeActionForKey:@"Music"];
[self runAction:[SKAction repeatActionForever:[SKAction playSoundFileNamed:@"Music.wav" waitForCompletion:YES]] withKey:@"Music"];
我应该使用AVAudioPlayer
还是[SKAction playSoundFileNamed:]
?
此外,我想知道是否有一种方法可以在所有场景中永久播放音乐文件,而无需从头开始。
答案 0 :(得分:3)
要在所有场景中播放背景音乐,我会推荐AVAudioPlayer
。您可以在AppDelegate
中的某处编写代码,以便从所有场景进行访问。以下是使用AVAudioPlayer
// AVAudioPlayer *bgMusicLoop;
- (void)playBackroundMusic:(NSString *)fileName withExtenstion:(NSString *)fileExtension
{
NSString *filePath = [[NSBundle mainBundle] pathForResource:fileName ofType:fileExtension];
NSError *error;
if(bgMusicLoop)
[bgMusicLoop stop];
bgMusicLoop = nil;
bgMusicLoop = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:filePath] error:&error];
if (error) {
NSLog(@"Error in audioPlayer: %@", [error localizedDescription]);
} else {
bgMusicLoop.numberOfLoops = -1;
[bgMusicLoop prepareToPlay];
[bgMusicLoop play];
}
}
- (void)stopBackgroundMusic
{
if(bgMusicLoop)
[bgMusicLoop stop];
bgMusicLoop = nil;
}
- (void)pauseBackgroundMusic
{
if(bgMusicLoop && bgMusicLoop.isPlaying)
[bgMusicLoop pause];
}
- (void)resumeBackgroundMusic
{
if(bgMusicLoop && !bgMusicLoop.isPlaying)
[bgMusicLoop play];
}
答案 1 :(得分:1)
对于音乐,您应该使用AVAudioPlayer
,因为使用SKAction
播放音乐会阻止您可能想要在场景中运行的任何其他操作,并且处理起来会更麻烦,尤其是如果您想要播放音乐伴随着更多的声音。
使用SKAction
播放简短的声音文件(如播放器跳/火等......)
使用AVAudioPlayer
,您可以轻松地将文件设置为重复播放,直到停止