Actionscript 3 Flash AS3:如何创建一个功能来播放来自不同按钮的声音?

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

我正在制作音板,我正在使用动作脚本。我想有一个功能与代码播放不同的声音取决于哪个按钮被按下。我也将从图书馆而不是URL播放。下面是一些混合了伪代码的真实代码,用于我想要做的事情:

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
属性来标识声音的链接名称。