我有一个包含4层的组件:(按升序排列)bgImage:Sprite,dropZone:Sprite,dropMask:Sprite和line:Sprite。 bgImage为0,0,其他对象放置在各种正坐标处。 dropMask正在屏蔽dropZone。
在位图捕获点我想只从dropZone和dropMask层绘制,所以我正在尝试这个:
removeChild(bgImage);
removeChild(line);
var bmd:BitmapData = new BitmapData(dropMask.width,dropMask.height,true,0);
bmd.draw(this,null,null,null,dropMask.getBounds(this));
尽管dropMask位于50,60,但捕获总是从0,0开始。我也试过获得边界矩形并强制x,y,但它没有区别。我在这里做错了什么,我应该忘记clipRect并使用矩阵吗?
答案 0 :(得分:6)
常见的例行程序:
var rect:Rectangle = dropMask.getRect(dropMask.parent);
var matrix:Matrix = new Matrix();
matrix.translate(-rect.x, -rect.y);
var bmp:BitmapData = new BitmapData(rect.width, rect.height, false, 0xFFFF0000);
bmp.draw(dropMask.parent, matrix);
解决方案步骤:
rectangle
。-rectangle.x
,-rectangle.y
draw()
电话中使用此矩阵。在第1步中,您甚至可能遇到类似的事情:
import flash.display.Sprite;
var test:Sprite = new Sprite();
test.graphics.beginFill(0, 1);
test.graphics.drawCircle(125, 234, 100);
test.graphics.endFill();
// we are going to draw test, so we get a rectangle
// in its own coordinate space to deal with registration point offset
var rect:Rectangle = test.getRect(test);
var matrix:Matrix = new Matrix();
matrix.translate(-rect.x, -rect.y);
var bmp:BitmapData = new BitmapData(rect.width, rect.height, false, 0xFFFF0000);
bmp.draw(test, matrix);
// see if we are done
addChild(new Bitmap(bmp));
当我编写使用大量绘图剪辑的内容时,我创建一个矩阵并每次重复使用它,执行matrix.identity();
重置变换。无需为每个图纸创建新的矩阵。
编辑不,clipRect在这里没有帮助。只有在想要部分绘制某个内容时才使用它,而不是整个剪辑。
答案 1 :(得分:0)
没关系,我误解了clipRect的目的。 http://pixelwelders.com/blog/actionscript-3/2008/as3-bitmapdata-foibles/。使用矩阵很容易解决问题。
var mat:Matrix = new Matrix(1,0,0,1,-offsetX,-offsetY);
bmd.draw(this,mat);