Flash AS3:新手,addChild有问题

Flash AS3:新手,addChild有问题,flash,actionscript-3,reference,colortransform,Flash,Actionscript 3,Reference,Colortransform,大家好 我对AS3和Flash CS4非常陌生,我遇到了一个问题。我有一个项目,用户在一个区域上用鼠标动态地绘制签名,然后在另一个框架上,在绘制签名后,他可以通过单击一些按钮来更改签名的颜色,每个按钮都有不同的颜色 我用这个来捕获另一帧的签名: 触发捕获事件的按钮: //targetMC is an MC to where the signature will be copied function buttonClick(event:MouseEvent):void{ capture(

大家好

我对AS3和Flash CS4非常陌生,我遇到了一个问题。我有一个项目,用户在一个区域上用鼠标动态地绘制签名,然后在另一个框架上,在绘制签名后,他可以通过单击一些按钮来更改签名的颜色,每个按钮都有不同的颜色

我用这个来捕获另一帧的签名:

触发捕获事件的按钮:

//targetMC is an MC to where the signature will be copied

function buttonClick(event:MouseEvent):void{
    capture(drawingBoard_mc, _targetMC);
    drawGraphics.clear();
    gotoAndStop(5);
};
功能

function capture(target:DisplayObject, _target:MovieClip):void {
    var relative:DisplayObject = target.parent;
    var rect:Rectangle = target.getBounds(relative);
    var bitmapData:BitmapData = new BitmapData(rect.width + PIXEL_BUFFER * 2, rect.height + PIXEL_BUFFER * 2);
    bitmapData.draw(relative, new Matrix(1, 0, 0, 1, -rect.x + PIXEL_BUFFER, -rect.y + PIXEL_BUFFER));

    var byteArray:ByteArray;
    var jpgEncoder:JPGEncoder = new JPGEncoder(JPG_QUALITY_DEFAULT);
    byteArray = jpgEncoder.encode(bitmapData);
    var ldr:Loader = new Loader();
    ldr.name = "signature";
    ldr.loadBytes(byteArray);
    //target is target mc where the signature will be copied into
    _target.addChild(ldr as DisplayObject);
}
它完美地复制了签名

问题出在目标5上,我有两个按钮来更改颜色:

//Color 1
line_bt1.buttonMode = true;
line_bt1.mouseChildren = false;
line_bt1.addEventListener(MouseEvent.MOUSE_DOWN, line_bt1Over);

//Color 2
line_bt2.buttonMode = true;
line_bt2.mouseChildren = false;
line_bt2.addEventListener(MouseEvent.MOUSE_DOWN, line_bt2Over);

function line_bt1Over(e:Event){
    var myMC:DisplayObject = DisplayObject(_targetMC.getChildByName("signature") as DisplayObject);
    changeColor(myMC, 0xCCCCCC);
    changeColor(myMC, 0xCCCCCC);
}

function line_bt2Over(e:Event){
    var myMC:DisplayObject = DisplayObject(_targetMC.getChildByName("signature") as DisplayObject);
    changeColor(myMC, 0x000000);
    changeColor(myMC, 0x000000);
}

function changeColor(object:DisplayObject, color:Number){
     var colorchange:ColorTransform = new ColorTransform();
     colorchange.color = color;
     object.transform.colorTransform = colorchange;
}
我的问题是_targetMC和签名子项都会改变颜色,我只想要子项/签名:

我使用var myMC:DisplayObject=DisplayObject\u targetMC.getChildByNamesignature作为DisplayObject;访问签名子项,但容器mc_targetMC也会更改颜色。。。我做错了什么

提前谢谢

每次调用changeColor一次就足够了

可以重用对象自己的颜色变换:

您可以省略对DisplayObject的所有类型转换-所有Sprite和MovieClips以及Loader都是DisplayObject的子类,因此在需要DisplayObject的任何地方,它们都可以正常工作:

var myMC:DisplayObject = _targetMC.getChildByName("signature"); 
// getChildByName always returns a DisplayObject

您的颜色更改功能应按预期工作。一定是出了什么事。我不能完全确定,但我猜您的问题要么与所有目标对象的混合有关:

函数捕获的参数目标 参数_函数捕获的目标 成员变量_targetMC 或者,这可能与每次调用capture时向同一个_targetMC添加一个名为signature的新加载程序有关,但永远不要删除旧加载程序:在第二次单击后,将有多个名为signature的剪辑,这可能会导致问题

var myMC:DisplayObject = _targetMC.getChildByName("signature"); 
// getChildByName always returns a DisplayObject
var ldr:Loader = new Loader();
ldr.name = "signature";
ldr.loadBytes(byteArray);
_target.addChild(ldr); // Loader extends DisplayObject