我有一个精灵(圆圈),我使用actionscript制作它。 这是伪代码:
var board:Sprite = new Sprite();
var spDot:Sprite = new Sprite()
spDot.graphics.lineStyle(1,0x0000CC);
spDot.graphics.beginFill(0xFFFFFF); //white;
spDot.graphics.drawCircle(0,0,dZ);
spDot.graphics.endFill();
spDot.name="v";
board.addChild(spDot);
我有一个按钮“btnA”可将当前的精灵颜色(白色)更改为黑色。
btnA.addEventListener(MouseEvent.CLICK, changeColor);
function changeColor(evt:MouseEvent){
(board.getChildByName("v") as Sprite).graphics.beginFill(0x000000);
}
但是,我的问题是,它在这部分中返回了错误:(board.getChildByName("v") as Sprite).graphics.beginFill(0x000000);
实际上我只是想用(board.getChildByName("v") as Sprite).graphics.beginFill(0x000000);
来改变颜色。
你有什么主意吗?谢谢!
答案 0 :(得分:2)
我建议不要披露应该着色的显示对象的实现,如果你同意这个陈述,你可以使用ColorTransform;)
ColorTransform类允许您调整显示对象中的颜色值。颜色调整或颜色转换可应用于所有四个通道:红色,绿色,蓝色和Alpha透明度。
btnA.addEventListener(MouseEvent.CLICK, buttonDidClick);
function buttonDidClick(e:MouseEvent) {
transformColor(board.getChildByName("v"), 0x000000);
}
function transformColor(target:DisplayObject, color:uint):void {
var colorTransform:ColorTransform = new ColorTransform();
colorTransform.color = color;
target.transform.colorTransform = colorTransform;
}
答案 1 :(得分:1)
这种最简单的方法是清除图形数据并重新绘制到图形对象中。
function drawCircle(sprite:Sprite, radius:Number = 40, fillColor:int = 0):Sprite
{
if (!sprite) return null;
const g:Graphics = sprite.graphics;
g.clear();
g.lineStyle(1, 0x0000CC);
g.beginFill(fillColor);
g.drawCircle(0, 0, radius);
g.endFill();
return sprite;
}
此外,我强烈建议您在需要某种类型时不要使用隐式调用:
function changeColor(evt:MouseEvent)
{
// hides the fact, that you're having an instance of am unexpected type
(board.getChildByName("v") as Sprite).graphics.beginFill(0x000000);
}
虽然你有一个有效的引用,但会导致1009 / null指针。
function changeColor(evt:MouseEvent)
{
// fails fast - for example when you change from sprite to bitmap.
Sprite(board.getChildByName("v")).graphics.beginFill(0x000000);
}
在这种情况下,快速失败是适合投射的方式。