2012-11-21 90 views
2

這裏是我的代碼有:的Flex/ActionScript中改變形狀填充顏色

private function drawRect():Sprite{ 
    var rect:Sprite = new Sprite(); 
    rect.name = "rectName"; 
    rect.graphics.beginFill(0xffff00); 
    rect.graphics.lineStyle(1,0x000000); 
    rect.graphics.drawRect(0,0,6,6); 
    rect.graphics.endFill(); 
    rect.addEventListener(MouseEvent.MOUSE_OVER, changeColor); 
    rect.addEventListener(MouseEvent.MOUSE_OUT, changeColorBack); 
    return rect; 
} 

private function changeColor(e:MouseEvent):void{ 
    var newColor:ColorTransform = new ColorTransform(); 
    newColor.color = 0x00ffff; 
    e.target.transform.colorTransform = newColor; 
} 

private function changeColorBack(e:MouseEvent):void{ 
    var newColor:ColorTransform = new ColorTransform(); 
    newColor.color = 0xffff00; 
    e.target.transform.colorTransform = newColor; 
} 

的changeColor和changeColorBack功能,又不會怎樣,我想他們。它們改變我的Sprite的整個顏色,包括矩形周圍的線條邊界(筆劃)。我想只改變矩形內的顏色並保持矩形的邊框。我在ColorTransform中看不到一個屬性,它允許我指定lineStyle,因此是否有另一種方法來更改我的rectagle的填充顏色並在其周圍保留邊框?

回答

1

ColorTransform適用於整個MovieClip,無論其圖形屬性如何繪製。你既可以每次需要時重新繪製矩形:

import flash.display.Sprite; 

function drawRect(target:Sprite, clr:Number):void{ 
    target.graphics.clear(); 
    target.graphics.beginFill(clr); 
    target.graphics.lineStyle(1,0x000000); 
    target.graphics.drawRect(0,0,6,6); 
    target.graphics.endFill(); 
} 

function changeColor(e:MouseEvent):void{ 
    drawRect(Sprite(e.target), 0x00ffff); 
} 

function changeColorBack(e:MouseEvent):void{ 
    drawRect(Sprite(e.target), 0xffff00); 
} 

var rect:Sprite = new Sprite(); 
rect.addEventListener(MouseEvent.MOUSE_OVER, changeColor); 
rect.addEventListener(MouseEvent.MOUSE_OUT, changeColorBack); 
this.addChild(rect); 

drawRect(rect, 0xffff00); 

或者,如果你正在使用ColorTransform出於某種原因設置,你可以建立你的概述長方形出的兩個獨立Sprites(外部和內部)和目標內Sprite只與ColorTransform

import flash.display.Sprite; 

function getRectangle(w:Number, h:Number, x:Number, y:Number, clr:Number):Sprite{ 
    var sprite:Sprite = new Sprite(); 
    sprite.name = "rectName"; 
    sprite.graphics.beginFill(clr); 
    sprite.graphics.drawRect(x, y, w, h); 
    sprite.graphics.endFill(); 

    return sprite; 
} 

function changeColor(e:MouseEvent):void{ 
    var newColor:ColorTransform = new ColorTransform(); 
    newColor.color = 0x00ffff; 
    inner.transform.colorTransform = newColor; 
} 

function changeColorBack(e:MouseEvent):void{ 
    var newColor:ColorTransform = new ColorTransform(); 
    newColor.color = 0xffff00; 
    inner.transform.colorTransform = newColor; 
} 

var rect:Sprite = new Sprite(); 
rect.addEventListener(MouseEvent.MOUSE_OVER, changeColor); 
rect.addEventListener(MouseEvent.MOUSE_OUT, changeColorBack); 
this.addChild(rect); 

// Outer rectangle for the outline 
var outer:Sprite = getRectangle(8, 8, 0, 0, 0x000000); 
rect.addChild(outer); 

// Smaller inner rectangle which can be targeted with the color transform 
var inner:Sprite = getRectangle(6, 6, 1, 1, 0xffff00); 
rect.addChild(inner); 
+0

感謝您的答覆。我曾考慮過這兩種解決方案,但是因爲這篇文章沒有實現它們。我希望不必重繪或創建另一個小孩精靈。現在我認爲在廣場周圍添加一個精靈更容易一些。 – iJared

+0

我實際上去了重繪廣場的第一個選項。 – iJared