Обычная рутина для этого:
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();
для сброса преобразований. Нет необходимости создавать новую матрицу для каждого чертежа.
EDIT И нет, clipRect здесь не помогает. Вы используете его только тогда, когда хотите нарисовать что-то частично, а не весь клип.