Como parar um SKAction de áudio?

Objetivo: quero apresentar uma nova cena:

[self.scene.view presentScene:level2 transition:reveal];

e encerre a música de fundo atual para iniciar a nova música de fundo (a nova música de fundo do nível 2).

TheProblem: Ao apresentar a nova cena, a música de fundo da 1. cena (nível1) continua sendo reproduzida e NÃO para mesmo ao sair do miniGame, pois todo o jogo consiste em alguns minijogos.

A música tocada é um SKAction:

@implementation WBMAnimalMiniGameLvL1

    -(id)initWithSize:(CGSize)size {    
        if (self = [super initWithSize:size])
        {
            /* Setup your scene here */
        self.temporaryScore = 0;
        self.animalSKSprites = [[WBMAnimalsMiniGameModel alloc] init];
        self.backgroundImage = [SKSpriteNode spriteNodeWithImageNamed:@"farmBackground1024x768.png"];
        self.backgroundImage.position = CGPointMake(CGRectGetMidX(self.frame),
                                       CGRectGetMidY(self.frame));
        self.temporaryStartingPointIndex = -1;
        [self addChild:self.backgroundImage];
        self.playBackgroundSound = [SKAction playSoundFileNamed:@"farm.mp3" waitForCompletion:NO];

        //SKAction *repeat = [SKAction repeatActionForever:playSound];
        [self runAction:self.playBackgroundSound withKey:@"play"];

        [self drawAllAnimalsOntoScreen];

    }
    return self;
}

Aqui acontece a transição para o próximo nível:

-(void)transitionToNextLevel
{
    NSLog(@"transitionToNextLevel");
    SKTransition *reveal = [SKTransition moveInWithDirection:SKTransitionDirectionDown duration:0.5];
    //SKView *skView = (SKView *)self.view;
    SKScene *level2 = [[WBMAnimalMiniGameLvL2 alloc] initWithSize:self.size];

    level2.scaleMode = SKSceneScaleModeAspectFill;

    [self removeAllActions];
    [self removeActionForKey:@"play"];
    //self.scene.view.paused = YES;
    //self.playBackgroundSound = nil;
    [self.scene.view presentScene:level2 transition:reveal];
}

Nas linhas de código dos comentários, você pode ver o que eu já tentei e o que não funcionou. O :

[self removeAllActions];
    [self removeActionForKey:@"play"];

não fez absolutamente nada. O:

self.scene.view.paused = YES;

A linha interrompe apenas a transição, mas a música continua.

Eu tentei o seguinte: - usei uma propriedade fraca ou forte em um:

@property (nonatomic,weak) SKAction *playBackgroundSound;

para proteger um ponteiro para o SKAction para que eu possa acessá-lo usando a propriedade "withKey" desde que eu inicializei o SKAction em "initWithSize". Alguém escreveu que o SKAction é um objeto de ignorar que eu entendi como sem ter armazenado um ponteiro para acessá-lo mais tarde, não é possível (diretamente). No entanto, não funcionou / me ajudou.

Eu olhei para muitas outras postagens de stackoverflow e nenhuma me ajudou ou pelo menos me deu uma pista do por que isso acontece:

SKAction playSoundFileNamed interrompe a música de fundo

Pare o SKAction que se repete para sempre - Kit Sprite

É possível encerrar uma ação intermediária do SKAction?

Pausando uma cena do kit de sprite

... Pensamentos: Parece que a ação é criada com a criação do objeto SKScene. É "viciado" e finalizado após a duração do áudio. Enquanto eu estava usando o repeatForever, isso nunca parava. No entanto, não há como pausar ou parar. Eu também tentei conectar o SKAction ao SKSpriteNode. Quando o SKScene é carregado, os animais são carregados com ele. Então, tentei conectar o SKAction no SKSpriteNode e usar removeAllActions e similares no SKSpriteNode, mas ele também não funcionou.

Verifiquei a documentação do SKAction, SKView, SKScene, SKSpriteNode, mas no final não me ajudou muito.

Parece que o objeto existe em algum lugar executando suas ações.

Sobre o que é o erro:

Não é um erro relacionado ao simulador ou ao dispositivo - eu testei no simulador e no dispositivo com o mesmo resultado (erro).

Não é um erro relacionado ao projeto - eu testei em um projeto separado, muito menor e com o mesmo resultado (erro).

Uma solução temporária: eu tenho usado a classe AVAudioPlayer da estrutura AVFoundation. Eu criei um:

//@property (nonatomic) AVAudioPlayer *theBackgroundSong;

Isso não ajudou muito, já que eu queria alterar a música de fundo quando o nível2 foi carregado e tive enormes problemas ao acessar a propriedade a partir de uma estrutura SKScene aninhada.

Qualquer conselho, pista, sugestão ou idéia seria de grande ajuda.

questionAnswers(2)

yourAnswerToTheQuestion