2012-11-21 66 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