ActionScript - 在维护显示对象的中心注册时绘制BitmapData

时间:2011-03-20 10:22:17

标签: actionscript-3 registration center draw bitmapdata

在转换为位图对象的同时保持圆形或任何其他具有中心对齐的显示对象的中心对准点被证明是困难的。

以下代码将圆形变换为位图对象,并将其放置在舞台的中心,然后删除其中心注册点。

新的bitmapData对象的x和y原点(左上角)与圆(中心)的x和y原点相同,但是无法转换bitmapData.draw的x和y位置( ) - 其参数仅接受宽度,高度,透明度和填充颜色。

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);

借助矩阵平移,新的位图对象将在舞台中居中显示,但应用常规或3D旋转等将清楚地表明注册点现在是左上角而不是中心

如何在保持中心注册的同时将中心注册的显示对象转换为位图?

2 个答案:

答案 0 :(得分:2)

看起来最常见的方法是简单地将位图添加为精灵容器的子级并旋转精灵容器而不是位图本身。

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 :(得分:1)