繁体   English   中英

Flex / ActionScript更改形状填充颜色

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM