Как да повторя музика с SKAction?

Искам да завъртя моята фонова музика със SKAction, но музиката спира след един ред, когато превключа към друга сцена. Има ли начин да стартирате цикъла и да продължите да го възпроизвеждате през различни сцени?

В момента кодът е поставен в init метода на MyScene - това правилното място ли е? Може би FinishLaunchingWithOptions?

Ето какво опитах:

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;


}

person user3138007    schedule 24.04.2014    source източник
comment
звуковото действие не е нищо повече от бърз удобен хак, за по-добър аудио контрол трябва да използвате AVAudioPlayer или лично аз бих препоръчал обвивка както за OpenAL, така и за AVAudio, а именно ObjectAL.   -  person LearnCocos2D    schedule 24.04.2014


Отговори (2)


Не можете да възпроизвеждате фонова музика върху сцените с помощта на SKActions. Използвайте 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];
}
person Andrey Gordeev    schedule 24.04.2014

В iOS 9 използвайте SKAudioNode за:

let backgroundMusic = SKAudioNode(fileNamed: "music.wav")
self.addChild(backgroundMusic)
person kerbi    schedule 01.11.2015