2012-11-27 30 views
0

好吧,想法很簡單,在舞臺上設置按鈕,點擊按鈕改變顏色來繪製。我試圖學習閃光&動作,並不確定我的問題在哪裏,但我無法弄清楚如何做到這一點。在按鈕actionscript 3,設置顏色變量onClick的按鈕

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

}

+1

你接近,但點擊一個按鈕,應該選擇從陣列的顏色字符串,權利,使按鈕應該將任顏色數組中的顏色或索引,它將在處理程序中用於設置「當前顏色」。在set_color處理程序中,e.target將作爲單擊的按鈕,您可以從名稱btn_1,btn_2等獲取索引。colorArray應該超出colors方法,例如。 Artist類的受保護成員:'protected var colorArray:Array',並且使用數字而不是字符串來表示顏色'0xFF0000',而不是'「0xFF0000」'。 –

回答

1

您應該通過按鈕名稱獲取索引,然後可以使用單擊索引來指定顏色。

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

另外,如果你想在方法中訪問它,請確保colorArray在整個類中都是已知的。 只要定義它的colors方法外面盧卡斯說: protected var colorArray:Array和使用號碼不是顏色0xFF0000而不是"0xFF0000"

+1

您還需要在Artist()主函數中初始化一個默認dc。 – Gone3d

+0

Gerrit,謝謝你,這個工作,我修改它來刪除公共職能,並且只是鞏固了Artist()函數中的所有內容。一個問題,雖然也許你可以解釋子字符串(4)對我來說,我不明白這一點的代碼。感謝這就像一個魅力。 – Majus457

+0

'substring'部分將獲得按鈕名稱,並從第4個字符開始提取所有內容(所以它會提取名稱中的數字)。 –

0

使用tag物業把顏色(或色指數),以按鈕本身,然後單擊處理通過event.sender.tag閱讀標籤。
您也可以使用顏色陣列中的標籤(以及來自另一陣列的名稱)生成按鈕。