【问题标题】:AS3 image rotate within / scale to fit spriteAS3 图像在内部旋转/缩放以适合精灵
【发布时间】: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 - 你找到解决方案了吗?

标签: actionscript-3 rotation sprite


【解决方案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);
    ...
    

    【讨论】:

      猜你喜欢
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 2012-09-26
      • 2011-01-26
      • 1970-01-01
      • 1970-01-01
      • 2011-05-12
      • 1970-01-01
      相关资源
      最近更新 更多