2

我有一个精灵(圆圈),我用动作脚本制作的。这是伪代码:

    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);改变颜色。你有什么主意吗?谢谢!

4

2 回答 2

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;
}
于 2015-03-25T11:38:39.310 回答
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);
}

在这种情况下,快速失败是合适的施法方式。

于 2013-01-02T10:12:00.527 回答