Actionscript 3 actionscript 3,单击按钮时设置颜色变量

Actionscript 3 actionscript 3,单击按钮时设置颜色变量,actionscript-3,Actionscript 3,好的,想法很简单,在舞台上设置一组按钮,点击按钮改变颜色进行绘制。我正在尝试学习flash&actionscript,但不确定我的问题出在哪里,但我不知道该怎么做 package { import flash.display.Sprite; import flash.events.MouseEvent; public class Artist extends Sprite { public var drawing:Boolean; public var colorArray:A

好的,想法很简单,在舞台上设置一组按钮,点击按钮改变颜色进行绘制。我正在尝试学习flash&actionscript,但不确定我的问题出在哪里,但我不知道该怎么做

package {
import flash.display.Sprite;
import flash.events.MouseEvent;

public class Artist extends Sprite {
    public var drawing:Boolean;
    public var colorArray:Array;
    public var dc;

    public function colors() {
        colorArray = ["0xFF0000","0xFFA500","0xFFFF00","0x00FF00","0x0000FF","0x4B0082","0x8F00FF","0xFF69B4","0x00CCFF","0x008000","0x8B4513"];

        for (var i:int = 0; i < colorArray.length; i++) {
        this["btn_" + i].addEventListener(MouseEvent.CLICK, set_color);
        }
    }

    public function set_color(e:MouseEvent):void {
        dc = colorArray;
    }

    public function Artist() {
        graphics.lineStyle(10,dc);
        drawing = false;
        stage.addEventListener(MouseEvent.MOUSE_DOWN, startDrawing);
        stage.addEventListener(MouseEvent.MOUSE_MOVE, draw);
        stage.addEventListener(MouseEvent.MOUSE_UP, stopDrawing);
    }

    public function startDrawing(event:MouseEvent):void {
        graphics.moveTo( mouseX, mouseY);
        drawing = true;
    }

    public function draw(event:MouseEvent) {
        if(drawing) {
            graphics.lineTo(mouseX,mouseY);
        }
    }

    public function stopDrawing(event:MouseEvent) {
        drawing = false;
    }
}
包{
导入flash.display.Sprite;
导入flash.events.MouseEvent;
公共级艺术家扩展精灵{
公共变量绘图:布尔;
公共变量数组:数组;
公共无功功率dc;
公共功能颜色(){
colorArray=[“0xFF0000”、“0xFF500”、“0xFFFF00”、“0x00FF00”、“0x0000FF”、“0x4B0082”、“0x8F00FF”、“0xFF69B4”、“0x00CCFF”、“0x008000”、“0x8B4513”];
for(变量i:int=0;i

}

使用按钮上的
标记
属性为按钮本身添加颜色(或颜色索引),然后在单击处理程序中通过
事件.sender.tag读取此标记


您还可以使用颜色数组中的标记(以及其他数组中的名称)生成按钮。

您应该通过按钮名称获取索引,然后可以使用单击的索引分配颜色

for (var i:int = 0; i < colorArray.length; i++) {
    this["btn_" + i].addEventListener(MouseEvent.CLICK, set_color);
}

public function set_color(e:MouseEvent):void {
    // Get the button name and fetch it's index
    var index:int = int(e.currentTarget.name.substring(4));
    dc = colorArray[index];
}
for(变量i:int=0;i
另外,如果要在方法中访问colorArray,请确保整个类都知道它。 只需在
颜色
方法之外定义它,正如卢卡斯所说:
protected var colorArray:Array
并将数字而非字符串用于颜色
0xFF0000
而不是
“0xFF0000”

您已接近,但单击按钮应从数组中选择颜色,因此右键按钮应将颜色或索引存储在颜色数组中,该颜色数组将在处理程序中用于设置“当前颜色”. 在set_颜色处理程序中,e.target将是单击的按钮,您可以从其名称btn_1、btn_2等获取索引。colorArray应超出colors方法,例如艺术家类的受保护成员:
protected var colorArray:Array
,并使用数字而不是字符串作为颜色
0xFF0000
,而不是
“0xFF0000”
。您还需要在Artist()主函数中初始化一个默认dc。Gerrit,谢谢,这很有效,我对它进行了修改,删除了公共函数,并整合了Artist()函数中的所有内容。有一个问题,也许你可以向我解释一下子字符串(4)部分,但我不理解其中的代码。谢谢,这工作起来很有魅力。
子字符串
部分将获得按钮名称,并提取从第四个字符开始的所有内容(因此它将提取名称中的数字)。哦,是的,将所有内容都放在构造函数函数
Artist()
中,而不是调用函数
init(),并将代码放在该init函数中。构造函数中的代码的编译方式不同于其他函数中的代码,在较小的应用程序中,您可能不会注意到这一点,但在较大的应用程序中,这可能会对性能产生微小的影响。