声音继续在Sprite Kit游戏中播放

时间:2015-02-11 00:04:42

标签: ios objective-c loops audio sprite-kit

我使用此代码在我的Sprite Kit游戏中循环播放一首歌,但是当我离开应用程序/游戏时,歌曲一直播放,我不知道如何在游戏结束时停止播放歌曲:

    url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"deep-blue-sea" ofType:@"wav"]];
    _sound = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
    _sound.delegate = self;
    _sound.numberOfLoops = -1;
    [_sound play];

请有人帮我怎么做?

1 个答案:

答案 0 :(得分:0)

UIApplicationDelegate协议有一个名为applicationWillResignActive:的方法。 The documentation说:

  

调用此方法可让您的应用知道它即将从活动状态转为非活动状态。对于某些类型的临时中断(例如来电或SMS消息)或当用户退出应用程序并且它开始转换到后台状态时,可能会发生这种情况。处于非活动状态的应用程序继续运行,但不会将传入事件分派给响应者。

     

您应该使用此方法暂停正在进行的任务,禁用计时器,并降低OpenGL ES帧速率。游戏应该使用这种方法暂停游戏。处于非活动状态的应用程序在等待转换为活动状态或后台状态时应该执行最少的工作。

停止音乐的绝佳时机! AVAudioPlayer有一个stop方法可以停止播放,就像play方法开始播放一样。您在评论中提到您的音频播放器位于SKScene中。所以我会在你的场景上创建一个停止音乐的方法:

-(void)stopMusic {
    [_player stop];
}

然后调用AppDelegate中的方法。

-(void)applicationWillResignActive:(UIApplication *)application {
    [scene stopMusic];    //scene is your SKScene subclass
}