[英]Flex/ActionScript Change Shape Fill Color
這是我的代碼:
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的屬性,所以有沒有其他方法可以改變我的矩形的填充顏色並保持其邊框?
ColorTransform
應用於整個MovieClip
無論在其graphics屬性中繪制了什么。 您可以在每次需要時重新繪制矩形:
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
(外部和內部)構建輪廓矩形,並僅使用ColorTransform
定位內部Sprite
:
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.