我正在制作一个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);
}
请告诉我代码有什么问题或建议我可以使用的另一种方法。
三江源,
克里斯
答案 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);
}