AS3。如何避免声音重叠?

时间:2013-07-06 00:32:23

标签: actionscript-3 flash

我正在制作一个flash项目,其中有13个不同的音乐文件。我希望用户能够通过单击相应的按钮来选择正在播放的歌曲。当用户点击十三个按钮中的一个时,我希望当前歌曲停止并且新歌曲从头开始播放,以便没有声音重叠。

当我测试我的电影时,我发现,最初,一些按钮会停止其他音乐,但有些按钮不会停止播放现有音乐的新音乐(我确定每个按钮的代码是相同的除外哪里有实例名称)最初工作的按钮,点击几下就停止工作。按钮可以完成我需要的一切,除了停止已经播放的音乐。

我使用了一个教程来学习如何使用ActionScript代码播放和控制库中的声音文件,但我的代码无法正常停止声音文件。我不知道为什么会这样,我会在这里发布一些代码。我有很多代码,因为有13个不同的按钮所以我只会发布一个按钮的代码。其余按钮的代码是相同的,除了数字后缀被更改为特定于每个按钮。所有代码都在同一符号的第1帧上。

var music1Play:Music1 = new Music1();

var music1Channel:SoundChannel = new SoundChannel();

btnPiece1.addEventListener(MouseEvent.CLICK, playMusic1);

function playMusic1(e:MouseEvent):void

{
     music2Channel.stop();
     music3Channel.stop();
     music4Channel.stop();
     music5Channel.stop();
     music6Channel.stop();
     music7Channel.stop();
     music8Channel.stop();
     music9Channel.stop();
     music10Channel.stop();
     music11Channel.stop();
     music12Channel.stop();
     music13Channel.stop();

     btnPiece1.mouseEnabled = false;    /*Disables button to avoid double click*/
     btnPiece1.mouseChildren = false;

     btnPiece2.mouseEnabled = true;    /*Enables the other buttons*/
     btnPiece3.mouseEnabled = true;
     btnPiece4.mouseEnabled = true;
     btnPiece5.mouseEnabled = true;
     btnPiece6.mouseEnabled = true;
     btnPiece7.mouseEnabled = true;
     btnPiece8.mouseEnabled = true;
     btnPiece9.mouseEnabled = true;
     btnPiece10.mouseEnabled = true;
     btnPiece11.mouseEnabled = true;
     btnPiece12.mouseEnabled = true;
     btnPiece13.mouseEnabled = true;

     music1Channel = music1Play.play(); 

     music1Channel.addEventListener(Event.SOUND_COMPLETE, loopMusic1);
}   

function loopMusic1(e:Event):void

{
     music1Channel = music1Play.play(); 
     music1Channel.addEventListener(Event.SOUND_COMPLETE, loopMusic1);
}

请告诉我代码有什么问题或建议我可以使用的另一种方法。

三江源,

克里斯

1 个答案:

答案 0 :(得分:1)

以下是一些可以帮助您的代码。我删除了事件监听器并添加了int.MAX_VALUE作为循环量,因此声音将继续播放,直到您单击另一个按钮。此时声音将停止,按钮将被启用等。检查出来,让我知道它是否会帮助你:

var music1Play:Music1 = new Music1();

var playingChannel:SoundChannel;

btnPiece1.addEventListener(MouseEvent.CLICK, playMusic1);

var buttons:Array = [btnPiece1, btnPiece2, btnPiece3, btnPiece4, btnPiece5, btnPiece6, btnPiece7, btnPiece8, btnPiece9, btnPiece10, btnPiece11, btnPiece12, btnPiece13];

function enableAllButtons():void 
{
    for (var i:int = 0; i < buttons.length; i++)     
    {
        buttons[i].mouseEnabled = true;
        buttons[i].mouseChildren = true;
    }
}

function stopCurrentChannel():void
{
    if (playingChannel)
    {
        playingChannel.stop();
    }
}

function playMusic1(e:MouseEvent):void
{
    stopCurrentChannel();

    enableAllButtons();

    btnPiece1.mouseEnabled = false;
    btnPiece1.mouseChildren = false;

    playingChannel = music1Play.play(0, int.MAX_VALUE); 
}