【问题标题】:Show another instance of a sprite显示精灵的另一个实例
【发布时间】:2011-06-03 09:55:58
【问题描述】:

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

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

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

【问题讨论】:

  • addChild(canvas) 添加画布,然后reflection.addChild(canvas) 删除画布并从其先前的父级中删除并将其添加到反射中。你需要一个画布的副本。最简单的解决方案是使用 BitmapData 将画布的内容绘制到其中,您可以应用变换矩阵对其进行翻转并根据需要对其进行遮罩。幸运的是,您可以使用 Reflection class on Adobe Devnet
  • @George,您在我发布答案之前写了该评论!应该把它放在一个我会赞成的答案中:)。
  • @Ascension 完成。这就是我已经在做的事情。 :)

标签: flash actionscript-3


【解决方案1】:

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

初始化:

// 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);

【讨论】:

  • 这很棒!只有一个问题,当它第一次加载时,它会快速闪烁,而我该如何解决呢?
  • @Owen BitmapData 在初始化时默认填充为白色。我将更改此答案,使其充满黑色但 100% 透明,并且画布已在 init 中绘制。
【解决方案2】:

您遇到的问题与此答案几乎完全相同:

Adding multiple instances of a Sprite?

这会告诉你为什么你现有的代码不工作。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    • 2012-01-03
    • 2018-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多