Как остановить аудио SKAction?

Цель: я хочу представить новую сцену:

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

и завершите текущую фоновую музыку, чтобы запустить новую фоновую музыку (новую фоновую музыку с уровня 2).

Проблема: При представлении новой сцены фоновая музыка сцены 1. (level1) продолжает играть и не останавливается даже при выходе из мини-игры, поскольку вся игра состоит из нескольких мини-игр.

Воспроизводимая музыка - это 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;
}

Здесь происходит переход на следующий уровень:

-(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];
}

В строках кода комментариев вы можете увидеть то, что я уже пробовал, а что не сработало. The:

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

абсолютно ничего не сделал. :

self.scene.view.paused = YES;

линия останавливает только переход, но музыка все еще продолжается.

Я пробовал следующее: - использовал слабое или сильное свойство на:

@property (nonatomic,weak) SKAction *playBackgroundSound;

чтобы защитить указатель на SKAction, чтобы я мог получить к нему доступ, используя свойство «withKey», так как я инициализировал SKAction в «initWithSize». Кто-то писал, что SKAction - это объект «забей и забудь», и я понял, что без сохранения указателя на него последующий доступ к нему невозможен (напрямую). Однако, это не сработало / не помогло мне.

Я просмотрел много других сообщений от stackoverflow, и ни один из них не помог мне или, по крайней мере, не дал мне понять, почему это происходит:

SKAction playSoundFileNamed останавливает фоновую музыку

Стоп SKAction, который повторяет Forever - Sprite Kit

Можно ли прекратить SKAction в середине действия?

Приостановка сцены с набором спрайтов

... Мысли: кажется, что действие создается с созданием объекта SKScene. Он "подключен" к нему и закончен после продолжительности аудио. Пока я использовал repeatForever, он никогда не остановится. Однако нет возможности приостановить или остановить его. Я также попытался подключить SKAction к SKSpriteNode. Когда SKScene загружен, животные загружаются им. Поэтому я попытался подключить SKAction к узлу SKSpriteNode и использовать removeAllActions и тому подобное из SKSpriteNode, но это не сработало.

Я проверил документацию по SKAction, SKView, SKScene, SKSpriteNode, но в итоге это мне не сильно помогло.

Похоже, объект существует где-то, где выполняются его действия.

Что ошибка не о:

Это не ошибка симулятора или устройства - я протестировал и симулятор, и устройство с одинаковым результатом (ошибка).

Это не ошибка проекта - я проверил ее в отдельном проекте, гораздо меньшего размера и с тем же результатом (ошибка).

Временное решение: я использую класс AVAudioPlayer из инфраструктуры AVFoundation. Я создал:

//@property (nonatomic) AVAudioPlayer *theBackgroundSong;

Это не сильно помогло, так как я хотел изменить BackgroundSong при загрузке level2, и у меня были огромные проблемы с доступом к свойству из вложенной структуры SKScene.

Любой совет, подсказка, подсказка или идея будут очень полезны.

Ответы на вопрос(2)

Ваш ответ на вопрос