actionscript-3 - 如何让 SoundChannel.stop() 在 AS3 中工作?

标签 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() 但音乐仍然继续播放。我究竟做错了什么?

最佳答案

基于本网站教程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();
}

关于actionscript-3 - 如何让 SoundChannel.stop() 在 AS3 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22276894/

相关文章:

c++ - 如何在 Windows 10 上以编程方式定义音频输出?

flash - 旋转 Sprite 将 Sprite 从其原始位置移动

actionscript-3 - AS3 : weird getBounds() result

flash - 重复事件监听器的数量?

ios - 在 iOS 中将录制的音频文件转换为 .wav 格式

php - 开关盒 <音频>

android - 从AndroidRecoreder.MaxAmplitude()获取更多分贝值范围

actionscript-3 - AS3ExternalInterface适用于IE但不适用于Firefox

flash - 将 MovieClip 转换为 ByteArray

javascript - 通过将mp3文件添加到<audio>元素来获取其持续时间?