Flash as3 - 在click事件中从实例创建变量

时间:2012-07-02 22:34:17

标签: actionscript-3 flash

我有一大堆按钮,都需要同时具有鼠标悬停效果以及更改色调的切换效果(点击时)。我已经为每个色调变化做了功能,并且这些部件工作得很好。可悲的是,我无法弄清楚如何使我的切换功能如何工作。

以下是切换按钮的代码。它工作正常,除了我的变量是全局的而不是特定的实例。因此,只有我只有一个按钮才有效。如何更改它以使用一个按钮的变量?

提前致谢!

var primary = false;

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

3 个答案:

答案 0 :(得分: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;  
        }  
    }

    ...
  }

答案 1 :(得分:0)

这取决于您为应用程序选择设计的方式。我的意思是,如果你的按钮数量有限并且你确切知道它们是什么并且它们保持不变(例如,按钮1,按钮2,按钮3或色调,饱和度和光线),则可以有三个切换变量。所以你想做:

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

然后,三个事件声明:

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

和三个函数声明:

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

...

否则,最好的方法是在按钮对象中创建切换变量和函数。这将是“更多OOP”,允许您创建任意数量的按钮,而无需反复编写相同的内容。

答案 2 :(得分: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;

        }
    }

}