Actionscript 3 Flash AS3:如何创建一个功能来播放来自不同按钮的声音?
我正在制作音板,我正在使用动作脚本。我想有一个功能与代码播放不同的声音取决于哪个按钮被按下。我也将从图书馆而不是URL播放。下面是一些混合了伪代码的真实代码,用于我想要做的事情:Actionscript 3 Flash AS3:如何创建一个功能来播放来自不同按钮的声音?,actionscript-3,flash,Actionscript 3,Flash,我正在制作音板,我正在使用动作脚本。我想有一个功能与代码播放不同的声音取决于哪个按钮被按下。我也将从图书馆而不是URL播放。下面是一些混合了伪代码的真实代码,用于我想要做的事情: var soundEffect:SoundEffect = new SoundEffect(); sound1_btn.addEventListener(MouseEvent:CLICK, buttonName, playSoundEffect); //possible? function playSoundEff
var soundEffect:SoundEffect = new SoundEffect();
sound1_btn.addEventListener(MouseEvent:CLICK, buttonName, playSoundEffect); //possible?
function playSoundEffect(e:Event, buttonName):void {
soundEffect.attachSound = buttonName + ".mp3" //pseudo code
soundEffect.play();
}
SoundEffect类正是我在Linkage中使用的名称。我不知道改变一个类所代表的声音的最佳方法,也不知道这样做的最佳方法。理想情况下,我不想创建50个不同的类,其中包含50个不同的声音变量和50个函数。我希望每个按钮都有某种标识符,在功能中我可以使用按钮名称或标识符来分配适当的声音。是的,您可以这样做。由于您有多个按钮,请将属性附加到每个按钮,如下所示。我将“soundToPlay”属性附加到sound1_btn
sound1_btn.soundToPlay = "1.mp3";
sound1_btn.addEventListener( MouseEvent.CLICK, handleBtnClick);
function handleBtnClick( e:Event ):void{
soundEffect.attachSound = e.target.soundToPlay;
soundEffect.play();
}
@hrehman为您提供了答案,但是如果您的button类没有属性
soundToPlay
,您可以使用name
属性作为ID。然后返回事件的currentTarget
属性
sound1_btn.name = "Sound1";
sound1_btn.addEventListener(MouseEvent:CLICK, playSoundEffect);
function playSoundEffect(e:Event):void {
soundEffect.attachSound = e.currentTarget.name + ".mp3";
soundEffect.play();
}
如果您使用的是按钮符号,则可以使用命名约定在按钮名称中对类名进行编码 因此,如果您的音效类名为
sfx\u jump
,您将命名您的实例:
sfx_jump_btn
然后按如下方式设置事件侦听器:
sfx_jump_btn.addEventListener(MouseEvent.CLICK, clickHandler);
在clickHandler函数中要做的是首先根据buttons name属性生成类名字符串。然后通过使用getDefinitionByName获得类定义,以便创建声音的实例,下面的代码是如何做到这一点的:
public function clickHandler(e:MouseEvent):void
{
var button:SimpleButton = e.target as SimpleButton;
// use replace to clip off the _btn suffix
var className:String = button.name.replace("_btn","");
var SoundClass:Class = getDefinitionByName(className) as Class;
var newSound:Sound = new SoundClass();
newSound.play();
}
您还需要添加此导入:
import flash.utils.getDefinitionByName;
我想指出,AS3中的Sound类没有attachSound方法。AS3中的Sound类没有attachSound方法。他的问题是不能播放声音。他的问题是通过一种方法点击按钮。你是对的,他的“下一个”问题将是播放声音。我很乐意回答他单独提出的与声音相关的问题。恐怕他是对的,我在这里完全是新手,当我尝试代码时,它抱怨没有soundToPlay属性。是否可以对其进行修改,以显示如何添加?假设我没有使用Flash的经验!AS3中的Sound类没有attachSound方法。我遇到以下错误:“无法修改时间线放置对象的name属性。”好的,忽略第一行。如果SoundEffects类有问题,可以使用@Prototypic的答案正确创建声音对象。请记住,您可以使用
name
属性来标识声音的链接名称。