アクションスクリプト3:EventListeners の追加と削除 (動的名と動的変数を使用)

StackOverflow https://stackoverflow.com/questions/2067936

質問

Flash Action Script 3 でボードゲームを作成しています。ボード上の各位置は次のようなボタンです。button_1_1、button_1_2などキャラクターが選択されるたびに、それを移動する必要があるため、スクリプトは選択したユニットの周囲の位置にイベント リスナーを追加する必要があります。


// This function adds or deletes an event listener
function listentoButton (isTrue:int, position_x:int, position_y:int):void {
    var myFunction:Function = new Function;
    myFunction = function ():void {userClickedPosition(position_x, position_y)};
    if (isTrue == 1) {
        this["button_position_"+(position_x)+"_"+(position_y)].addEventListener(MouseEvent.CLICK, myFunction);
    } else {
        this["button_position_"+(position_x)+"_"+(position_y)].removeEventListener(MouseEvent.CLICK, myFunction);
    }
}

コードの残りの部分には次のものがあります。

  • 関数 userClickedPosition(position_x:int,position_y:int)
    ユニットを選択または選択解除します

  • 関数 selectUnit(位置_x:int, 位置_y:int):
    listentoButton(1) 関数を使用して 8 つのリスナー (クリックされたユニットの周囲の位置) を追加します。

  • 関数 deselectUnit(位置_x:int, 位置_y:int):
    listentoButton(0) 関数を使用して 8 つのリスナー (クリックされたユニットの周囲の位置) を削除します。

私の質問: イベントリスナーを追加することは問題ありませんが、それらを削除すると機能しないように思えますか?私が何を間違えたのでしょうか?

役に立ちましたか?

解決

あなたがイベントを削除するために行くときは、

、あなたはMyFunctionの新しいインスタンスではなく、あなたがそれを追加したのと同じものを使用しています。あなたは他のあらゆる関数のように関数を宣言する必要がある、などのボタンの位置を調べるためにイベント引数を使用しますか。私はあなたがのstageXおよびstageYという性質をしたいと考えて: http://www.adobe.com/livedocs/フレックス/ 3 / langref /フラッシュ/イベント/ MouseEvent.htmlする

// This function adds or deletes an event listener
function listentoButton (isTrue:int, position_x:int, position_y:int):void {
    if (isTrue == 1) {
        this["button_position_"+(position_x)+"_"+(position_y)].addEventListener(MouseEvent.CLICK, myFunction);
    } else {
        this["button_position_"+(position_x)+"_"+(position_y)].removeEventListener(MouseEvent.CLICK, myFunction);
    }
}

function myFunction(eventArg:MouseEvent):void {
//use MouseEvent
};

それとも、あなたが希望、あなたがイベントを削除するために行くとき、後で座標情報を、そのクラスの新しいインスタンスを作成し、x、y座標でインデックス化コレクションに追加し、保持するために、少しMyFunctionParametersクラスを作成することができますxおよびy座標に基づいて、コレクション内MySpaceParametersインスタンスを検索し、機能を削除するためにそれを使用します。

class MyFunctionParameters
{
public x:int;
public y:int;
    function myFunction(eventArg:MouseEvent):void {
        userClickedPosition(x,y);
    };
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top