【发布时间】:2012-10-21 02:43:15
【问题描述】:
我在 Flash 中创建了几个按钮。我正在努力做到这一点,如果您单击一个按钮,音频就会开始播放该按钮。如果您单击另一个按钮,活动音频将停止,并且您上次单击的按钮的新音频开始播放。
有什么帮助吗?
【问题讨论】:
标签: actionscript-3 flash actionscript-2
我在 Flash 中创建了几个按钮。我正在努力做到这一点,如果您单击一个按钮,音频就会开始播放该按钮。如果您单击另一个按钮,活动音频将停止,并且您上次单击的按钮的新音频开始播放。
有什么帮助吗?
【问题讨论】:
标签: actionscript-3 flash actionscript-2
您所描述的实际上很容易做到。
首先,我建议将音频导入您的 Flash 项目。或者,有一种方法可以直接从外部文件播放。这超出了我的回答范围,所以如果你需要帮助,你应该发布一个专门涵盖它的问题。
假设您已将音频文件导入到 Flash 项目的库中,请为其创建一个 as3 实例。 (右键单击库中的文件,单击属性--> ActionScript [tab] --> [Check] 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 从头开始,不循环。请参阅documentation。]
现在您连接按钮的事件侦听器。 (如果您需要有关事件侦听器的帮助,请阅读documentation。)
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);
}
这应该足以帮助您入门。在我的游戏核心中,我实际上有一个用于处理声音播放的自定义类,它使我能够重复声音、改变音量以及防止声音相互冲突。我这样说是为了强调你可以在声音类上做很多事情。在documentation 中挖掘一些想法和帮助。
您也可以考虑在 playSound 函数中添加一条 try-catch 语句,因为如果您为不存在的声音传递名称,它将引发引用错误。
【讨论】: