Actionscript 3 Flash as3-从点击事件实例创建变量

Actionscript 3 Flash as3-从点击事件实例创建变量,actionscript-3,flash,Actionscript 3,Flash,我有一大堆按钮,它们都需要有鼠标悬停效果和切换效果(点击)来改变色调。我已经为每个色调的变化,这部分工作相当好的功能。可悲的是,我不知道如何让我的切换功能正常工作 下面是我的切换按钮代码。它工作正常,只是我的变量是全局变量,而不是实例的特定变量。因此,它只在我只有一个按钮的情况下工作。如何将其更改为使用一个用于焦点中的一个按钮的变量 提前谢谢 var primary = false; function clickOn(e:MouseEvent):void{ if (primary =

我有一大堆按钮,它们都需要有鼠标悬停效果和切换效果(点击)来改变色调。我已经为每个色调的变化,这部分工作相当好的功能。可悲的是,我不知道如何让我的切换功能正常工作

下面是我的切换按钮代码。它工作正常,只是我的变量是全局变量,而不是实例的特定变量。因此,它只在我只有一个按钮的情况下工作。如何将其更改为使用一个用于焦点中的一个按钮的变量

提前谢谢

var primary = false;

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

实际上,这取决于您如何为应用程序选择设计。我的意思是,如果你有一个数量有限的按钮,你知道它们是什么,并且它们保持不变(比如,按钮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;
    }
}
以及三个功能声明:

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;
    }
}


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

最好的做法是扩展用于按钮的类并向其添加函数,以便从中派生的所有按钮都具有您想要的idependant行为

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;  
        }  
    }

    ...
  }
这就是我所做的

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;

        }
    }

}

这似乎是一个很好的解决方案,但问题是我需要为按钮存储它,因为当鼠标离开按钮时,它需要保留正确的颜色。我希望我可以从实例的名称创建一个变量,如下所示。var e.target.name+“primary”=真;您必须将鼠标悬停事件移动到扩展代码中,就在click事件下面,它将分别为每个实例运行,而不会对其他实例造成干扰。请在问题中发布您的更新代码。谢谢您的代码。我最终设置了var primary:Array=newarray;然后使用primary[e.target]引用它。如果你解决了你的问题并且不想在这个问题上得到更多的反馈,请将你的解决方案作为答案发布,并将其标记为正确。