如何使SoundChannel.stop()在AS3中工作?

时间:2014-03-09 00:25:34

标签: actionscript-3 audio

我抬起头来的所有东西都让这看起来如此简单,但我无法让它为我的生活而努力。

我有一个简单的Flash游戏,需要一个菜单​​来启动游戏,返回菜单并静音,我有两个不同的声音文件:一个在菜单屏幕上播放,另一个在实际游戏中播放

我正在尝试控制它们以便游戏音乐在游戏加载时启动,并在您返回菜单时停止。但是当你返回菜单时,游戏音乐会继续播放,尽管我给出了stop()命令。

我可以让stop()命令工作一次(当我退出菜单并进入游戏时),但它只能运行一次。每当我调用stop()时,我都需要它来停止音乐,而不仅仅是第一次。

        public var GameMusic:Sound; 
        public var MenuMusic:Sound;

        public var sc1:SoundChannel;
        public var sc2:SoundChannel;

        GameMusic = new Sound();
        GameMusic.load(new URLRequest("GameMusic.mp3"));

        MenuMusic = new Sound();
        MenuMusic.load(new URLRequest("MenuMusic.mp3"));

        sc1 = GameMusic.play(0, 99);
        sc2 = MenuMusic.play(0, 99);

        sc1.stop();

这就是我一开始就拥有的。正如您所看到的,我立即告诉GameMusic停止,因为出于某种原因,如果您想使用声道,Flash会强制您在开头播放所有声音。这次停止GameMusic工作;只应加载菜单音乐。但是后来当我回到菜单时,它继续播放。 换句话说,当我的代码再次加载菜单时,它会调用sc1.stop()但音乐会继续播放。我做错了什么?

2 个答案:

答案 0 :(得分:0)

基于此网站教程http://www.republicofcode.com/tutorials/flash/as3sound/

它应该是:

var muted:Boolean = false;//share this var with layer

var GameMusic:Sound = new Sound();
var MenuMusic:Sound = new Sound();
var sc1:SoundChannel = new SoundChannel();
var sc2:SoundChannel = new SoundChannel();

if(!muted){
    GameMusic.load(new URLRequest("GameMusic.mp3"));
    MenuMusic.load(new URLRequest("MenuMusic.mp3"));
    sc1 = GameMusic.play();
    sc2 = MenuMusic.play();
}else{
    sc1.stop();
    sc2.stop();
}

答案 1 :(得分:0)

  

我做错了什么?

借助框架使用主时间轴和导航。

我假设您在SoundChannel上丢失了正确的引用。