当我尝试在位图中转换电影剪辑时,我遇到了一个问题。一切都很好,但有些属性不在新的位图中。
例如,如果我有一个影片剪辑,我翻转它(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) );