0

私にはたくさんのボタンがあり、それらすべてにマウスオーバー効果と色相を変更するトグル効果(クリック時)の両方が必要です。色相を変更するたびに機能を作成しましたが、その部分は非常にうまく機能しています。悲しいことに、トグル関数を想定どおりに機能させる方法がわかりません。

以下はトグルボタンの私のコードです。私の変数がインスタンスに固有ではなくグローバルであることを除いて、それは正常に機能します。そのため、ボタンが1つしかない場合にのみ機能します。フォーカスされている1つのボタン用の変数を使用するように変更するにはどうすればよいですか?

前もって感謝します!

var primary = false;

function clickOn(e:MouseEvent):void{ 
    if (primary == false)     {
            greenHue(e.target);
            primary = true;
    } else {
            noHue(e.target);
            primary = false;
    }
}
4

3 に答える 3

2

最善の方法は、ボタンに使用したクラスを拡張し、それに関数を追加することです。これにより、ボタンから派生するすべてのボタンが、必要な独立した動作をするようになります。

class ColoredButton extends Button {
    var primary = false;  

    public function ColoredButton() {
        this.addEventListener(MouseEvent.CLICK, clickOn);
    }

    private function clickOn(e:MouseEvent):void {   
        if (primary == false)     {  
            greenHue(e.target);  
            primary = true;  
        } else {  
            noHue(e.target);  
            primary = false;  
        }  
    }

    ...
  }
于 2012-07-02T22:59:52.963 に答える
0

実際には、アプリケーションのデザインをどのように選択したかによって異なります。つまり、ボタンの数が限られていて、それらが何であるかを正確に知っていて、それらが同じままである場合(たとえば、button1、button2、button3または色相、彩度、光)、3つのトグル変数を持つことができます。だからあなたはしたい:

var primaryH = false;
var primaryS = false;
var primaryL = false;

次に、3つのイベント宣言:

buttonH.addEventListener(MouseEvent.CLICK, clickOnH);
buttonS.addEventListener(MouseEvent.CLICK, clickOnS);
buttonL.addEventListener(MouseEvent.CLICK, clickOnL);

および3つの関数宣言:

function clickOnH(e:MouseEvent):void{ 
    if (primaryH == false)     {
            greenHue(e.target);
            primaryH = true;
    } else {
            noHue(e.target);
            primaryH = false;
    }
}

..。

それ以外の場合は、ボタンオブジェクトにトグル変数と関数を作成するのが最善です。それは「より多くのOOP」であり、同じことを何度も何度も書くことなく、好きなだけボタンを作成することができます。

于 2012-07-02T22:44:08.650 に答える
0

これが私がしたことです。

var primary:Array = new Array;



    if (primary[e.target.name] == true || secondary[e.target.name] == true) {
        noHue(e.target);
        primary[e.target.name] = false;

    } else {

            greenHue(e.target);
            primary[e.target.name] = true;

        }
    }

}
于 2012-07-05T13:17:07.397 に答える