1

我正在做一个 Flash 项目,其中有十三个不同的音乐文件。我希望用户能够通过单击相应的按钮来选择正在播放的歌曲。当用户单击十三个按钮中的一个时,我希望当前歌曲停止,新歌曲从头开始播放,这样不会有声音重叠。

当我测试我的电影时,我发现最初,一些按钮会停止其他音乐,但有些不会,并且新音乐会在当前音乐上播放(我确信每个按钮的代码都是相同的,除非有实例名称)最初起作用的按钮,单击几下后停止工作。这些按钮可以完成我需要的一切,除了停止已经播放的音乐。

我使用教程来了解如何使用 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);
}

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

谢谢,

克里斯

4

1 回答 1

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); 
}   
于 2013-07-06T02:37:28.640 回答