我有一个不同场景的精灵套件游戏:主菜单(“MainMenuScene”)和游戏场景(“MyScene”)。当用户正在玩游戏时,我有无尽的背景音乐。但是当玩家想要停止游戏并返回主菜单时,背景音乐会继续播放。我该怎么办才能让它停下来?我试过了[self removeAllActions]
,但它没有用。
MyScene:
@implementation MyScene
{
SKAction *_backgroundMusic;
}
-(id)initWithSize:(CGSize)size {
if (self = [super initWithSize:size]) {
self.backgroundColor = [SKColor colorWithRed:0.15 green:0.5 blue:0.3 alpha:1.0];
}
//Here I make the endless background music
_backgroundMusic = [SKAction playSoundFileNamed:@"Background 2.m4a" waitForCompletion:YES];
SKAction * backgroundMusicRepeat = [SKAction repeatActionForever:_backgroundMusic];
[self runAction:backgroundMusicRepeat];
return self;
}
- (void)selectNodeForTouch:(CGPoint)touchLocation
{
SKSpriteNode *touchedNode = (SKSpriteNode *)[self nodeAtPoint:touchLocation];
if ([_MainMenuButton isEqual:touchedNode]) {
SKScene *mainMenuScene = [[MainMenuScene alloc]initWithSize:self.size];
[self.view presentScene:mainMenuScene];
//Here is where the music should stop, when the player presses the 'return to main menu' button
}
}
答案 0 :(得分:1)
我不建议使用SKAction播放背景音乐。而是使用AVAudioPlayer。
使用AVAudioPlayer:
将AVFoundation添加到您的项目中。
#import <AVFoundation/AVFoundation.h>
到您的.m文件中。
在@implementation
AVAudioPlayer *_backgroundMusicPlayer;
醇>
使用此代码段运行音频:
- (void)playBackgroundMusic:(NSString *)filename
{
NSError *error;
NSURL *backgroundMusicURL = [[NSBundle mainBundle] URLForResource:filename withExtension:nil];
_backgroundMusicPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:backgroundMusicURL error:&error];
_backgroundMusicPlayer.numberOfLoops = -1;
_backgroundMusicPlayer.volume = 0.8;
_backgroundMusicPlayer.delegate = self;
[_backgroundMusicPlayer prepareToPlay];
[_backgroundMusicPlayer play];
}
同时阅读AVAudioPlayer Class Reference,以便了解所有属性的功能,例如设置音量,循环次数等等。
答案 1 :(得分:0)
试试这个播放音乐:
[self runAction:backgroundMusicRepeat withKey:@"bgmusic"];
然后停止:
[self removeActionForKey:@"bgmusic"];
更新
SKAction * backgroundMusicRepeat = [SKAction playSoundFileNamed:@"Background 2.m4a" waitForCompletion:YES];
backgroundMusicRepeat = [SKAction repeatActionForever:backgroundMusicRepeat];
[self runAction:backgroundMusicRepeat];
我已经在我自己的项目中运行这些代码,看起来很有效。
但不是你的方式,它只在我退出视图时停止,我甚至不需要removeActionForKey
。 [self removeActionForKey:@"bgmusic"];
无法在场景中使用。
因此,如果您想在同一视图的不同场景之间切换时停止声音,我建议您使用AVAudioPlayer。
我还发现stackoverflow中的其他一些问题与你有同样的问题,如下所示: how to pause the sound when use SpriteKit 还有这个: Spritekit stopping sound 他们都去AVAudioPlayer。
作为这些链接中的评论之一说: 你应该使用playSoundFileNamed方法播放声音效果...短暂的1或2秒,如爆炸声 - 不要用它来做背景声音。