首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AS3:删除声音?

AS3:删除声音?
EN

Stack Overflow用户
提问于 2013-07-15 03:42:51
回答 1查看 1.4K关注 0票数 0

CS5中ActionScript 3的一个问题

您好,我正在制作一个简单的菜单(我知道它很简单,但我的as3技能还不是那么“高级”)和一个简单的选项菜单与声音选项,其中唯一可以做的是改变音乐从1到3,但是,我的问题从这里开始。我想让这些按钮相互作用,每当按下按钮1时,BGM1Sound就会播放,如果在按键1之前按下按钮2或3,这些按钮上的歌曲就会停止。但。这不管用。我尝试使用SoundChannel来引导它,并尝试将其设置为BGM1.stop();;甚至转向Boolean,但我只是在原地打转,因为它要么不起作用,要么我会得到错误-通常是1120,这是布尔值和SoundChannels的未定义属性的常见值(我认为我会得到它,但是嘿,它值得一试)。当然,音乐加载工作正常,但问题是,如上所述,对于那些不停止时,另一个按钮被按下。

这是代码,只有按钮,并分配给相应的BGM声音:

代码语言:javascript
复制
stop();
import flash.events.MouseEvent;
import flash.media.SoundChannel;
import flash.media.Sound;
import PffLib_fla.MainTimeline;

var BGM1ON:Boolean=false;
var BGM2ON:Boolean=false;
var BGM3ON:Boolean=false;
var BGM1Channel:SoundChannel=new SoundChannel();
var BGM2Channel:SoundChannel=new SoundChannel();
var BGM3Channel:SoundChannel=new SoundChannel();

BGM1Btn.addEventListener(MouseEvent.CLICK,handler3);
BGM2Btn.addEventListener(MouseEvent.CLICK,handler3);
BGM3Btn.addEventListener(MouseEvent.CLICK,handler3);
MainMenuBtn2.addEventListener(MouseEvent.CLICK,handler3);

function handler3(CLICKEvent3:MouseEvent):void{
    if(CLICKEvent3.target==MainMenuBtn2){
        gotoAndStop("MainMenu");
    }
    if(CLICKEvent3.target==BGM1Btn){
        BGM2Channel=BGM2Sound.stop();//just going to write those channels here for a reference of what I was doing, but basically, each button had channels referring to each sound, and the idea was to stop the sound not loaded by respective button when clicked//
        BGM3Channel=BGM3Sound.stop();
        var SoundRequest1:Sound=new Sound();
        SoundRequest1.addEventListener(Event.COMPLETE,onSoundLoaded1);
        var Request1:URLRequest=new URLRequest("audio/BGM1.mp3");
        SoundRequest1.load(Request1);

        function onSoundLoaded1(SoundRequestEvent1:Event):void{
            var BGM1Sound:Sound=SoundRequestEvent1.target as Sound;
            BGM1Sound.play(0,1);
            BGM1ON=true;
        }
    }
    if(CLICKEvent3.target==BGM2Btn){
        var SoundRequest2:Sound=new Sound();
        SoundRequest2.addEventListener(Event.COMPLETE,onSoundLoaded2);
        var Request2:URLRequest=new URLRequest("audio/BGM2.mp3");
        SoundRequest2.load(Request2);

        function onSoundLoaded2(SoundRequestEvent2:Event):void{
            var BGM2Sound:Sound=SoundRequestEvent2.target as Sound;
            BGM2Sound.play(0,1);
            BGM2ON=true;
        }
    }
    if(CLICKEvent3.target==BGM3Btn){
        var SoundRequest3:Sound=new Sound();
        SoundRequest3.addEventListener(Event.COMPLETE,onSoundLoaded3);
        var Request3:URLRequest=new URLRequest("audio/BGM3.mp3");
        SoundRequest3.load(Request3);

        function onSoundLoaded3(SoundRequestEvent3:Event):void{
            var BGM3Sound:Sound=SoundRequestEvent3.target as Sound;
            BGM3Sound.play(0,1);
            BGM3ON=true;
        }
    }
}

我希望有人能帮助我,因为我变得焦虑不安(╯°-°)╯︵┻━┻只是为了理解这里的问题,以及如何解决它,尽管谷歌叔叔没有给我任何好的答案;因此我写了这篇文章。请帮帮我,谢谢(シ_ _)シ

EN

回答 1

Stack Overflow用户

发布于 2013-07-15 05:29:50

您可能想查看一下SoundChannel reference。它有一个如何使按钮播放和停止声音的示例。

从您发布的代码来看,您似乎错误地使用了SoundChannel。您应该在播放时将声音分配给该通道,并在该通道上调用stop。

所以就像这样:

代码语言:javascript
复制
bgmChannel = bgm1Sound.play(0,1);

开始在声道中播放bgm1Sound

当您想要停止在频道中播放声音时,只需调用bgmChannel.stop();。它将停止该通道中正在播放的任何声音。

如果你一次只播放一个声音,那么你应该只需要一个声音通道,而不是三个。每次启动新声音时,将其分配给您的通道,然后在该通道上调用stop()以停止该声音。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17643037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档