向所有人致以问候。
我是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上,我有2个按钮来改变颜色:
//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(_targetMC.getChildByName("signature") as DisplayObject);
来访问签名子项,但容器mc(_targetMC)也会改变颜色......我做错了什么?
提前致谢。
答案 0 :(得分:0)
每次拨打changeColor
就足够了。
您可以重复使用对象自己的colorTransform
:
function changeColor(object:DisplayObject, color:Number){
var colorchange:ColorTransform = object.transform.colorTransform;
colorchange.color = color;
object.transform.colorTransform = colorchange;
}
您可以省略所有类型转换为DisplayObject - 所有Sprite,MovieClip和Loaders都是DisplayObject的子类,因此无论何处需要DisplayObject,它们都可以正常工作:
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
您的colorChange
功能应按预期工作。一定有别的错误。我不能完全确定,但我猜你的问题要么与你所有目标(_mc)对象的混合有关:
或者,它可能与每次调用capture()
时向同一_targetMC添加名为“signature”的新Loader有关,但从不删除旧的:在第二次单击后,将有多个剪辑的名称为“签名”,这可能会导致问题。