AS3:删除声音?

时间:2013-07-14 19:42:51

标签: actionscript-3 flash button audio error-handling

CS5中的ActionScript 3的问题

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

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

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;
        }
    }
}

我希望有人会帮助我,因为我变得激动(╯°□°)┻(┻━┻只是为了解这里的问题,以及如何解决它,不过,谷歌叔叔没有任何好的答案对我来说;因此这篇文章。 请帮帮我,谢谢(シ_ _)シ

1 个答案:

答案 0 :(得分:0)

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

从您发布的代码中,看起来您使用的是SoundChannel错误。 您应该在播放时将声音分配给频道,并在频道上呼叫停止。

类似于:

bgmChannel = bgm1Sound.play(0,1);

开始在声道中播放bgm1Sound

如果要停止在频道中播放的声音,只需拨打bgmChannel.stop();即可。它会阻止该频道播放的任何声音。

如果你一次只播放一个声音,那么你应该只需要一个声道而不是三声道。每次开始播放新声音时,请将其指定给频道,然后拨打该频道上的stop()以停止播放声音。