AS3 图像在内部旋转/缩放以适合精灵
Posted
技术标签:
【中文标题】AS3 图像在内部旋转/缩放以适合精灵【英文标题】:AS3 image rotate within / scale to fit sprite 【发布时间】:2014-07-22 16:24:19 【问题描述】:我们正在从想要拍摄图像并在其中旋转/缩放以适应的精灵制作位图数据。这是我们的代码,其中包含一个旋转。
_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);
【问题讨论】:
这是我猜测的示例代码,但它完全错误,根本无法绘制任何东西。你有更好的吗? @mdk - 你找到解决方案了吗? 【参考方案1】:使用缩放/旋转绘制精灵的简单方法是在方法bitmapData.draw() 中使用Matrix。
例子:
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);
【讨论】:
【参考方案2】:您的问题可能是围绕左上角旋转的原因(这会使整个对象在注册点(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);
...
【讨论】:
以上是关于AS3 图像在内部旋转/缩放以适合精灵的主要内容,如果未能解决你的问题,请参考以下文章