AS3图像在/ scale内旋转以适合精灵

时间:2014-07-22 16:24:19

标签: actionscript-3 rotation sprite

我们正在制作一个精灵中的位图数据,我们想要拍摄图像并在/尺度内旋转以适应。这是我们的代码,包括轮换。

_rotation定义了用户输入的内容。

问题是,我们得到一个100%白色的输出文件。 我们认为图像旋转大约为0x0y,因此将图像旋转到精灵的边界之外。

此外,图像不会缩放到孩子,而是在继承时进行“裁剪”。

这样做的最佳方式是什么?基本上我们想要拍摄图像并在/尺度内旋转以适合

var sprite1:Sprite = new Sprite();
addChild(sprite1);
var photoBitmap:Bitmap = new Bitmap(_bitmapData);
sprite1.addChild(photoBitmap);
sprite1.rotation = _rotation;  
var sprite2:Sprite = new Sprite();
addChild(sprite2);
sprite2.addChild(sprite1);

var bitmapData:BitmapData = new BitmapData(sprite2.width,sprite2.height,false,0xFFFFFF);
bitmapData.draw(sprite2);

2 个答案:

答案 0 :(得分:0)

使用缩放/旋转绘制精灵的简单方法是在方法Matrix中使用bitmapData.draw()

示例:

var sourceImage:SomeSprite = new SomeSprite();
var matrix:Matrix = new Matrix();
matrix.scale(0.5, 0.5);
matrix.rotate(0.5 * Math.PI);
var newImage:BitmapData = new BitmapData(sourceImage.width/2, sourceImage.height/2);
newImage.draw(sourceImage, matrix);

答案 1 :(得分:0)

您的问题可能是左上角旋转的原因(可能会使整个对象位于注册点之上或之上(0 x和0 y)而不会被绘制。

您可以轻松解决此问题的方法是在轮换后移动sprite1以考虑因旋转而导致的新尺寸和位置:

...
sprite2.addChild(sprite1);

var actualPosition:Rectangle = sprite2.getBounds(sprite2); //this gets the new position/dimensions of the object
sprite1.x = -actualPosition.x;
sprite1.y = -actualPosition.y;

var bitmapData:BitmapData = new BitmapData(sprite2.width,sprite2.height,false,0xFFFFFF);
...