AS3中从影片剪辑中创建位图时的问题



当我尝试在位图中转换电影剪辑时,我遇到了一个问题。一切都很好,但有些属性不在新的位图中。

例如,如果我有一个影片剪辑,我翻转它(mc.scaleX *= -1),当我把它转换成位图时,它不会翻转它

import flash.geom.Matrix;
import flash.display.BitmapData;
import flash.display.Bitmap;
var box1:Box = new Box();
box1.x = 100;
box1.y = 20;
addChild( box1 );
box1.scaleX *= -1;
var box2:Box = new Box();
box2.x = 300;
box2.y = 20;
addChild( box2 );
var matrix:Matrix = new Matrix( 1, 0, 0, 1, (box1.width / 2), (box1.height / 2) );
var bitmapData:BitmapData = new BitmapData( box1.width, box1.height, true, 0xFFFFFF);
bitmapData.draw(box1, matrix, null, null, null, true);

var bitmap:Bitmap = new Bitmap( bitmapData );
addChild( bitmap );
bitmap.x = 400;
bitmap.y = 300;

如果你能检查这个简单的例子,你就会明白我的意思,"位图"应该是翻转的,它不是。

谢谢你的帮助。

你最好得到你想要转换的影片剪辑的矩阵,并对其使用矩阵方法,如;

var myMatrix:Matrix = myDisplayObject.transform.matrix;  
myMatrix.scale(1,-1); 
myDisplayObject.transform.matrix = myMatrix;  
var bitmapData:BitmapData = new BitmapData( box1.width, box1.height, true, 0xFFFFFF);
bitmapData.draw(box1, myMatrix, null, null, null, true);

这种方法更容易,因为在矩阵上设置旋转和缩放可能很复杂。

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/geom/Matrix.html?filter_flash=cs5& filter_flashplayer = 10.2, filter_air = 2.6

当您对DisplayObject进行draw()时,应用于它本身的任何转换都不会受到尊重。如果你想缩放或平移它,你需要对你提供给draw调用的变换矩阵做那个。

在这种情况下,将您的矩阵初始化更改为这样可能会奏效:

var matrix:Matrix = new Matrix( 1, 0, 0, 1, -(box1.width / 2), (box1.height / 2) );

最新更新