Graphics 的 beginBitmapFill 可以传入一个 Matrix 参数,用来指定对图片要做的平移、缩放、旋转等操作,只要把缩放参数设置为负数就能实现绘制镜像了。另外对 BitmapData 使用 draw 方法时缩放参数设置为负的话没有效果,不知是啥原因。
package
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Loader;
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.geom.Matrix;
import flash.net.URLRequest;
/**
* ...
* @author zxc
*/
public class Main extends Sprite
{
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
var shape:Shape = new Shape();
addChild(shape);
var loader:Loader = new Loader();
var onLoadComplete:Function = function (event:Event):void
{
trace(event);
var bd:BitmapData = new BitmapData(loader.width, loader.height);
bd.draw(loader);
// draw left
shape.graphics.beginBitmapFill(bd);
shape.graphics.drawRect(0, 0, bd.width, bd.height);
shape.graphics.endFill();
// draw mirror left
shape.graphics.beginBitmapFill(bd, new Matrix( -1, 0, 0, 1, 0, 0));
shape.graphics.drawRect(bd.width, 0, bd.width, bd.height);
shape.graphics.endFill();
}
var onIOError:Function = function (event:IOErrorEvent):void
{
trace(event);
}
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
loader.load(new URLRequest("left.png"));
}
}
}
执行效果图: