在ViewController中播放时,从SKScene中静音AVAudioPlayer

时间:2014-02-25 08:41:20

标签: ios avaudioplayer sprite-kit volume

我有一个AVAudioPlayer设置为在ViewController.m中无限循环。 我的问题是如何从SKScene

中静音AVAudioPlayer
//ViewController.m

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Space theme2"  ofType:@"mp3"]];
    _music = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
    [_music prepareToPlay];
    [_music setVolume:0.5];
    _music.numberOfLoops = -1;
    [_music play];

所以AVAudioPlayer正在ViewController.m中播放,需要在SKScene中静音/取消静音。

//SKScene.m

if ([node.name isEqualToString:@"Mute"]) {
    //Mute Music "[_music setVolume:0.0]; isn't doing anything"
    self.Mute.position = CGPointMake(-100, self.Mute.position.y);
    self.Unmute.position = CGPointMake(160, self.Unmute.position.y);
}
if ([node.name isEqualToString:@"Unmute"]) {
    //Unmute Music [_music setVolume:0.5]; isn't doing anything"
    self.Mute.position = CGPointMake(160, self.Mute.position.y);
    self.Unmute.position = CGPointMake(-100, self.Unmute.position.y);
}

感谢任何帮助

2 个答案:

答案 0 :(得分:1)

使用NSNotificationCenter

//ViewController.m

- (void)awakeFromNib {
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(stopMusic:)
                                                 name:@"StopMusic"
                                               object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(playMusic:)
                                                 name:@"PlayMusic"
                                               object:nil];
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Space theme2"  ofType:@"mp3"]];
    _music = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
    [_music prepareToPlay];
    [_music setVolume:0.5];
    _music.numberOfLoops = -1;
    [_music play];
}

- (void)stopMusic:(NSNotification*)notification {
    [_music stop];
}

- (void)playMusic:(NSNotification*)notification {
    [_music play];
}

- (void) dealloc
{
    // If you don't remove yourself as an observer, the Notification Center
    // will continue to try and send notification objects to the deallocated
    // object.
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

// Scene.m:

if ([node.name isEqualToString:@"Mute"]) {
    [[NSNotificationCenter defaultCenter]
         postNotificationName:@"StopMusic" object:self];
    self.Mute.position = CGPointMake(-100, self.Mute.position.y);
    self.Unmute.position = CGPointMake(160, self.Unmute.position.y);
}
if ([node.name isEqualToString:@"Unmute"]) {
    [[NSNotificationCenter defaultCenter]
         postNotificationName:@"PlayMusic" object:self];
    self.Mute.position = CGPointMake(160, self.Mute.position.y);
    self.Unmute.position = CGPointMake(-100, self.Unmute.position.y);
}

答案 1 :(得分:0)

您可以使用NSNotification或委托方法。您可以查看herehere