0

いくつか異なる質問があり、それらを1つにまとめることにしました。したがって、最初の質問:同じコードがある場合(たとえば):

buttonsA.buton1a.addEventListener(MouseEvent.MOUSE_DOWN , buton1a_function);
buttonsA.buton2a.addEventListener(MouseEvent.MOUSE_DOWN , buton2a_function);
buttonsA.buton3a.addEventListener(MouseEvent.MOUSE_DOWN , buton3a_function);
buttonsA.buton4a.addEventListener(MouseEvent.MOUSE_DOWN , buton4a_function);
buttonsA.buton5a.addEventListener(MouseEvent.MOUSE_DOWN , buton5a_function);
buttonsA.buton6a.addEventListener(MouseEvent.MOUSE_DOWN , buton6a_function);
buttonsA.buton7a.addEventListener(MouseEvent.MOUSE_DOWN , buton7a_function);
buttonsA.buton8a.addEventListener(MouseEvent.MOUSE_DOWN , buton8a_function);
buttonsA.buton9a.addEventListener(MouseEvent.MOUSE_DOWN , buton9a_function);
buttonsA.buton10a.addEventListener(MouseEvent.MOUSE_DOWN , buton10a_function);

そして、それをいくつかの場所に(異なる条件で)配置したいのですが、それらを関数に配置して、大量のテキストをコピーする代わりに関数を呼び出すことができます(別のファイルから「インクルード」を考えましたが、すべてを保持したい1つのファイルの情報)。

2番目の質問は配列についてです:私の状況では、私は配列を持っていて、 その中に異なる番号を.push()します。しかし、それは「1,51,11,2,13」または「1,2,3,4」である可能性があります、5 "なので、数字の場所(および数字自体)は毎回異なります。関数内のAS3に、5または6の数字を正確に削除(.splice)する方法を教えてください(配列内の場所に関係なく)。

3番目の質問も、質問の上位にある「コード」についてです。これらの10個すべてのaddEventListenをより少ないコードで作成するためのループを使用できますか(私はそれがそのようなものでなければならないと思います:)

    for(var i:int = 1; i <= 100; i++){
   //buttonsA.buton'i'a.addEventListener(MouseEvent.MOUSE_DOWN , buton'i'a_function);
    }

簡単に言えば、あまり質問をする必要がなく、考えが正しくないかもしれませんが、質問は簡単だと思いますが、解決できません。どんな決定や返事も歓迎します:)ありがとう。

4

1 に答える 1

1

最初の質問:

最初の質問がわかりません。私はそれを突き刺して、アプリケーションの状態のさまざまなコンテキストでボタンマウスダウンの機能を有効にしたいが、すべてのイベントリスナーを常に繰り返したくないと言いますか?

その場合は、すべてのボタンを継承するためのサブクラスを作成する必要があります。次のようになります。

public class ButtonSubClass extends Sprite {  //or simple button, or whatever
    public function ButtonSubClass():void {
        this.addEventListener(MouseEvent.MOUSE_DOWN,downHandler,false,0,true);
    }

    private function downHandler(e:MouseEvent):void {
        //do something common to all your buttons here
    }
}

次に、すべてのボタンをこのクラスから継承します。

2番目の質問:

function removeFromArray(elementVal:*):void {
    var index:int = array.indexOf(elementVal);  //get the index of the first element whose value is the passed parameter;
    if(index >= 0){
        array.splice(index,1); //remove that element/index from the array.
    }
}

3番目の質問:

が子だけがリスナーに必要なすべてのボタンであるスプライトの場合ButtonA、次のように実行できます。

var i:int = buttonA.numChildren;
while(i--){
    buttonsA.getChildAt(i).addEventListener(MouseEvent.MOUSE_DOWN , button_function);
}

function button_function(e:Event):void {
    switch(e.currentTarget){
        case button1a:
            //do something with button 1a
            break;

        case button2a
            //do something with button 2a
            break;
    }
}

または、よりだらしなく効率が低く、推奨されません。これは次のとおりです。

for(var i:int=1;i<=10;i++){
    this["buton" + i.toString() + "a"].addEventListener(MouseEvent.MOUSE_DOWN, this["buton" + i.toString() + "a_function"]); 
}
于 2012-09-17T19:13:19.103 に答える