Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 当按钮被单击时如何更改精灵颜色3_Actionscript 3_Flash - Fatal编程技术网

Actionscript 3 当按钮被单击时如何更改精灵颜色3

Actionscript 3 当按钮被单击时如何更改精灵颜色3,actionscript-3,flash,Actionscript 3,Flash,我有一个精灵(圆圈),我用动作脚本制作的。 以下是伪代码: 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.gr

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

    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”)作为Sprite)

实际上,我只是猜测使用
(board.getChildByName(“v”)作为精灵)更改颜色。

你知道吗?谢谢大家!

最简单的方法是清除图形数据并重新绘制到图形对象中

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);
}

在这种情况下,fast失败是合适的施放方式。

我建议不要公开应该着色的显示对象的实现,如果您同意这一说法,您可以使用;)

ColorTransform类用于调整显示对象中的颜色值。颜色调整或颜色变换可应用于所有四个通道:红色、绿色、蓝色和alpha透明度

例子:
@Nicols Siver这个建议只适用于我最初用不透明1填充的颜色。当我在init上使用opacity 0,然后尝试在单击事件上使用beginll和transform填充一些颜色时。它不起作用。有什么解决办法吗??
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;
}