ActionScript - рисование BitmapData при ведении центра регистрации экранного объекта - PullRequest
0 голосов
/ 20 марта 2011

поддержание центральной точки регистрации в форме круга или любого другого экранного объекта с регистрацией центра, в то время как преобразование в растровый объект оказывается трудным.

следующий код преобразует форму круга вРастровый объект размещает его в центре сцены и впоследствии удаляет его центральную регистрационную точку.

Начало координат x и y нового объекта bitmapData (вверху слева) совпадает с началом координат x и y объектаокружность (центр), но невозможно перевести координаты x и y в bitmapData.draw () - его параметры принимают только ширину, высоту, прозрачность и цвет заливки.

var myCircle:Shape = new Shape();
myCircle.graphics.beginFill(0xFF0000, 1.0);
myCircle.graphics.drawCircie(0, 0, 100);
myCircle.graphics.endFill();

var matrix:Matrix = new Matrix();
matrix.tx = myCircle.width / 2;
matrix.ty = myCircle.height / 2;

var myCircleBitmapData:BitmapData = new BitmapData(myCircle.width, myCircle.height, true, 0x00FFFFFF);
myCircleBitmapData.draw(myCircle, matrix);

var result:Bitmap = new Bitmap(myCircleBitmapData, PixelSnapping.AUTO, true);
result.x = stage.stageWidth / 2 - matrix.tx;
result.y = stage.stageHeight / 2 - matrix.ty;

addChild(result);

с помощьюВ матричном переводе новый растровый объект будет отображаться по центру сцены, но применение обычного или трехмерного вращения и т. д. будет ясно демонстрировать, что точка регистрации теперь находится в верхнем левом углу вместо центра.

Как я могу преобразовать центральный зарегистрированный экранный объект в растровое изображение в то время как Maintaв своем центре регистрации?

Ответы [ 2 ]

2 голосов
/ 21 марта 2011

представляется наиболее распространенным подходом - просто добавить растровое изображение в качестве дочернего элемента контейнера спрайта и вращать контейнер спрайта, а не само растровое изображение.

var myCircle:Shape = new Shape();
myCircle.graphics.beginFill(0xFF0000, 1.0);
myCircle.graphics.drawCircie(0, 0, 100);
myCircle.graphics.endFill();

var matrix:Matrix = new Matrix();
matrix.tx = myCircle.width / 2;
matrix.ty = myCircle.height / 2;

var myCircleBitmapData:BitmapData = new BitmapData(myCircle.width, myCircle.height, true, 0x00FFFFFF);
myCircleBitmapData.draw(myCircle, matrix);

var myCircleBitmap:Bitmap = new Bitmap(myCircleBitmapData, PixelSnapping.AUTO, true);
myCircleBitmap.x -= matrix.tx;
myCircleBitmap.y -= matrix.ty;

var circleContainer:Sprite = new Sprite();
circleContainer.addChild(myCircleBitmap);

альтернативно для тех, кто использует Flash Professional IDEесть возможность использовать fl.motion.MatrixTransformer.rotateAroundInternalPoint вместо использования спрайта контейнера.

1 голос
/ 20 марта 2011

Следующий урок выглядит как то, что вы пытаетесь сделать.

http://www.8bitrocket.com/2007/10/30/Actionscript-3-Tutorial-BitmapData-rotation-with-a-matrix/

...