3

我在 Flash 中创建了一些按钮。我正在努力做到这一点,如果您单击一个按钮,音频就会开始播放该按钮。如果您单击另一个按钮,活动音频将停止,并且您上次单击的按钮的新音频开始播放。

请问有什么帮助吗?

4

1 回答 1

2

你所描述的实际上很容易做到。

首先,我建议将音频导入您的 Flash 项目。或者,有一种方法可以直接从外部文件播放。这超出了我的回答范围,所以如果您需要帮助,您应该发布一个专门涵盖它的问题。

假设您已将音频文件导入到 Flash 项目的库中,请为其创建一个 as3 实例。(右键单击库中的文件,单击属性 --> ActionScript [选项卡] --> [检查] Export for ActionScript & [Enter name in] Class)

现在,在您的代码中创建声音的定义。(假设您的两个声音在上一步的 Class 字段中被命名为“mySound1”和“mySound2”。)

var mySound1:Sound = new mySound1();
var mySound2:Sound = new mySound2();

现在,定义您的声音通道。

var mySoundChannel:SoundChannel = new SoundChannel();

有两种替代方法可以停止一种声音并播放另一种声音。第一个是创建一个每次都执行的函数。第二种方法是创建两个公式,一个用于“播放”,一个用于“停止”。您需要决定哪种方法最适合您。我将使用下面的双功能方法:

function stopSound():void
{
   //This stops all sound in the sound channel. 
   //If there is nothing playing, nothing happens.
   mySoundChannel.stop();
}

//In this function, we create an argument that allows us to tell the function 
//what sound to we want it to play.
function playSound(soundname:String):void
{
   mySoundChannel = this[soundname].play(0, 0);
}

[注意,您可以调整 play() 属性以满足您的需要,例如从歌曲中间开始,或者永远循环播放。0,0 从头开始​​,不循环。请参阅文档。]

现在您连接按钮的事件侦听器。(如果您需要有关事件侦听器的帮助,请阅读文档。)

myButton1.addEventListener(Mouse.CLICK, btn1Click);
myButton2.addEventListener(Mouse.CLICK, btn2Click);

function btn1Click(evt:Event):void
{
   stopSound();
   playSound(mySound1);
}

function btn2Click(evt:Event):void
{
   stopSound();
   playSound(mySound2);
}

这应该足以让您入门。在我的游戏核心中,我实际上有一个用于处理声音播放的自定义类,它使我能够重复声音、改变音量以及防止声音相互冲突。我这样说是为了强调你可以在声音类上做很多事情。在该文档中进行一些挖掘以获得想法和帮助。

您也可以考虑在 playSound 函数中放置一条 try-catch 语句,因为如果您为不存在的声音传递名称,它将引发引用错误。

于 2012-10-31T16:01:47.110 回答