将应用程序移动到后台时音乐不会停止

时间:2012-04-21 11:33:08

标签: iphone actionscript-3 audio air

我正在优化游戏,以便当有来电或由于任何其他原因移动到后台时,它应该停止音乐,定时器并正确暂停。

除了由于某种原因音乐不会停止播放这一事实之外,它的效果很好,即使我发出命令让它停止。更奇怪的是,当游戏回到前台时,有两个背景音乐而不是一个。

这是我的一些代码,没有太复杂或不同寻常的事情:

  ...

NativeApplication.nativeApplication.systemIdleMode = SystemIdleMode.KEEP_AWAKE;
            NativeApplication.nativeApplication.addEventListener(Event.ACTIVATE, handleActivate);
            NativeApplication.nativeApplication.addEventListener(Event.DEACTIVATE, handleDeactivate);
...
private function handleActivate(event:Event):void
        {

            stage.frameRate = previousFrameRate;

//if the music was on when the game is moved to the background, then replay it when its moved back to the foreground
            if(musicOn) 
            {
                BGMusic.play();
            }


        }

        private function handleDeactivate(event:Event):void
        {
            BGMusic.stop();
            stage.frameRate = 0;
        }

值得注意的是,如果当游戏返回到前台时我没有重放音乐(即当我在handleActivate中不使用BGMuusic.play()时),将不会有任何预期的音乐。只有当我停止播放音乐并在以后移动到前景时才恢复它,背景音乐不会停止,我会得到两个播放曲目。

有什么想法吗?正如我所说,其他一切正常,游戏正确暂停。我正在Flash Builder模拟器上测试它,因为我没有必要的证书来直接在iphone上测试它。因此,可能是模拟器本身而不是代码存在问题。

提前致谢

编辑:我用flash和adobe air写这篇文章

2 个答案:

答案 0 :(得分:1)

那对我来说是愚蠢的。一切正常,我只是忘了在if语句中添加另一个条件。所以而不是:

            if(musicOn) 
            {
                BGMusic.play();
            }

应该是

            if(musicOn && !BGMusic.isPlaying())
            {
                BGMusic.play();
            }

现在一切正常......我会将musicOn的变量名更改为像musicButtonOn更清晰的东西。

无论如何,谢谢你的帮助。如果您有任何提示或意见,请随时告诉我= D

答案 1 :(得分:0)

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag {
      NSLog(@"Playing stoped");
      [player stop];
}