Как остановить аудио 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.
Любой совет, подсказка, подсказка или идея будут очень полезны.