2015-02-11 100 views
0

我使用此代码来循环播放我的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]; 

请有人可以帮我怎么做吗?

回答

0

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

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

您应该使用此方法暂停正在进行的任务,禁用定时器并降低OpenGL ES帧速率。游戏应该使用这种方法来暂停游戏。处于不活动状态的应用程序在等待转换到活动状态或背景状态时应该做最少的工作。

完美的时间停止音乐! AVAudioPlayer有一个stop方法来停止播放,就像play方法开始播放一样。您在评论中提到您的音频播放器位于SKScene中。因此,我将创建停止音乐场景的方法:

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

,然后调用方法AppDelegate

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

谢谢,但我必须在AppDelegate.h中实现AVAudioPlayer框架以使用stop方法吗?我在SKScene中声明了_sound属性,我如何在AppDelegate中使用它? – 2015-02-11 00:38:24

+0

@FacundoSchiavoni看我的编辑。 – NobodyNada 2015-02-11 00:47:03