显示精灵的另一个实例

时间:2011-06-03 09:55:58

标签: flash actionscript-3

是否可以显示精灵的另一个实例?我想要做的是反映一个动画精灵 到目前为止我所拥有的是我的Sprite,称为“canvas”,它通过使用AS3在其中进行动画制作。而我想要做的就是展示它翻转的副本,在它下面看起来像一个反射。我尝试了以下代码,但没有运气,它只是隐藏了一切?...

addChild(canvas);
var reflection:Sprite = new Sprite();
addChild(reflection);
reflection.addChild(canvas);

为什么这段代码不起作用的任何想法?或者你有更好的方法来解决这个问题 感谢

2 个答案:

答案 0 :(得分:3)

您可以使用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);

on animation / redraw

// clear to transparency
reflectionData.fillRect(reflectionData.rect, 0);
// draw the current canvas with matrix applied
reflectionData.draw(canvas, reflect);

答案 1 :(得分:1)

你几乎和这个答案中的问题完全相同:

Adding multiple instances of a Sprite?

这将告诉您为什么现有代码无效。

至于如何完成你想做的事情,我只想使用一个位图对象来绘制原始的sprite。您可以使用传递给Bitmap.draw函数的Matrix对象作为参数来执行此操作。创建矩阵时,只需将垂直维度的比例值1反转,并将其设置为-1。这是一个如何执行此操作的教程:

http://www.adobe.com/devnet/flash/articles/reflect_class_as3.html

他们可能没有使用矩阵变换,可能只是反转包含bitmapdata的精灵的比例,我不确定我没有阅读完整的教程。我所知道的是本教程将为您提供您想要做的事情(有一个例子)。