0

私は響板を作っていて、actionscript を使っています。押されたボタンに応じて異なるサウンドを再生するコードを備えた関数が 1 つ必要です。また、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 の異なるクラスを作成したくありません。各ボタンに何らかの識別子があり、関数内でボタン名または識別子を使用して適切なサウンドを割り当てることができます。

4

3 に答える 3

1

ボタンシンボルを使用している場合は、ボタン名にクラス名をエンコードする命名規則を使用できます。

したがって、効果音のクラス名がsfx_jump、の場合、インスタンスに名前を付けます。

sfx_jump_btn  

次に、イベントリスナーを次のように設定します。

sfx_jump_btn.addEventListener(MouseEvent.CLICK, clickHandler);

clickHandler関数で実行したいことは、最初にボタンの名前プロパティに基づいてclassName文字列を生成することです。次に、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;
于 2013-01-01T18:33:41.720 に答える
0

@hrehmanには答えがありますが、ボタンクラスにプロパティがない場合は、プロパティをIDとしてsoundToPlay使用できます。イベントのプロパティをname取得します。currentTarget

sound1_btn.name = "Sound1";
sound1_btn.addEventListener(MouseEvent:CLICK, playSoundEffect);

function playSoundEffect(e:Event):void {
    soundEffect.attachSound = e.currentTarget.name + ".mp3";
    soundEffect.play();
}
于 2013-01-01T17:49:02.157 に答える
0

はい、できます。複数のボタンがあるため、以下のように各ボタンにプロパティをアタッチします。「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();
}
于 2013-01-01T17:15:57.723 に答える