您可以使用BitmapData
。
类成员:
// flip vertically and shift by 100 (insert your canvas size)
private var reflect:Matrix = new Matrix(1, 0, 0, -1, 0, 100);
// instanciate BitmapData with 100x100 size (insert your canvas size),
// filled with black but with 100% transparancy, it's an
// ARGB value (0 == 0x00000000)
private var reflectionData:BitmapData = new BitmapData(100, 100, true, 0);
private var reflection:Bitmap = new Bitmap(reflectionData);
INIT:
// you might want to draw canvas already on startup
reflectionData.draw(canvas, reflect);
reflection.x = canvas.x;
reflection.y = canvas.y + canvas.height;
addChild(reflection);
上动画/重绘
// clear to transparency
reflectionData.fillRect(reflectionData.rect, 0);
// draw the current canvas with matrix applied
reflectionData.draw(canvas, reflect);
的addChild(画布)增加了帆布,然后reflection.addChild(画布)去除画布和从它的前一个父母,并将其添加到反射。你需要一个画布的副本。最简单的解决方案是使用BitmapData将画布的内容绘制到其中,如果您愿意,可以应用变换矩阵将其翻转并遮罩。幸运的是,您可以使用[Adobe Devnet上的Reflection类](http://www.adobe.com/devnet/flash/articles/reflect_class_as3.html)。 – 2011-06-03 10:34:17
@George,你在我发布我的答案之前写了那条评论!应该把它放到一个答案我woulda upvoted :)。 – 2011-06-03 10:36:00
@Ascension完成。这就是我已经在努力的。 :) – Matthias 2011-06-03 10:42:18