如何使用SKAction循环播放音乐?

3
我希望使用SKAction循环我的背景音乐,但是当我切换到另一个场景时,音乐只播放一次就停止了。有没有办法开始循环并在不同的场景中继续播放?
目前,该代码位于MyScene的init方法中 - 这是正确的位置吗?或者应该在didFinishLaunchingWithOptions中放置?
这是我尝试过的内容:
if (delegate.musicOn == YES && delegate.musicIsPlaying == NO) {

    SKAction *playMusic = [SKAction playSoundFileNamed:@"loop.wav" waitForCompletion:YES];
    SKAction *loopMusic = [SKAction repeatActionForever:playMusic];
    [self runAction:loopMusic];

    delegate.musicIsPlaying = YES;


}

声音操作不过是一种快捷方便的 hack,为了更好地控制音频,你应该使用 AVAudioPlayer,或者我个人推荐同时支持 OpenAL 和 AVAudio 的封装库,即 ObjectAL。 - CodeSmile
2个回答

5
在iOS 9中使用SKAudioNode来实现以下功能:
let backgroundMusic = SKAudioNode(fileNamed: "music.wav")
self.addChild(backgroundMusic)

5

如果要在场景中播放背景音乐,不能使用 SKAction。应该改用 AVAudioPlayer

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"music" ofType:@"mp3"];
NSError *error;
AVAudioPlayer *gameSceneLoop = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:filePath] error:&error];
if (error) {
    NSLog(@"Error in audioPlayer: %@", [error localizedDescription]);
} else {
    gameSceneLoop.numberOfLoops = -1;
    [gameSceneLoop prepareToPlay];
    [gameSceneLoop play];
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接