【问题标题】:adding transparent sprite over another sprite在另一个精灵上添加透明精灵
【发布时间】:2012-09-27 17:06:02
【问题描述】:

我需要在另一个精灵上放置一个透明精灵。覆盖的精灵将接受一些鼠标事件。当用户将鼠标移到上部精灵上时,将绘制一条曲线。处理完成后,它将在基础精灵上绘制(并在上部擦除)。

我现在的想法是放置精灵,绘制一个大小等于精灵大小的矩形并将 alpha 设置为 0。

问题有点转储:也许建议的解决方案不是最好的。有没有更好的方法来设置宽度和高度(据我了解Sprite.width = w; 不会有帮助)?

提前谢谢你!

【问题讨论】:

  • 为什么不能在精灵本身上设置这个鼠标事件?
  • 嗯,这对我来说是不可能的。我已经更新了这个问题:当用户将鼠标移到上部精灵上时,将绘制一条曲线。处理完成后,它将在基础精灵上绘制(并在上部擦除)。
  • 你所做的是正确的。您不能设置 Sprite 的宽度或高度。它采用其内容的边界矩形的尺寸。

标签: actionscript-3 flash


【解决方案1】:

您不能直接设置尺寸,但可以在该 Sprite 上绘制。所以你可以这样做:

graphics.beginFill(0,0); // zero alpha fill
graphics.lineStyle(0,0,0); // invisible lines
graphics.drawRect(0,0,width,height);
graphics.endFill();

这样,您的 Sprite 可以将其 alpha 保持在 1,以不隐藏任何属于其子项的内容。然后,无论您决定在该 Sprite 中绘制什么曲线,您都可以通过 graphics.moveTo 和 graphics.lineTo 在子 Shape 对象中绘制。

更新:根据下面的 cmets,将 alpha 设置为 0 不适用于较新的 Flash 播放器版本,因此应将 alpha 设置为非零值,以便事件在重叠精灵上注册。

graphics.beginFill(0x808080,0.01); // almost zero alpha fill

【讨论】:

  • 嗯,这就是我所说的:我现在的想法是放置精灵,绘制一个大小等于精灵大小的矩形并将 alpha 设置为 0。无论如何,谢谢!
  • 不,还有更多。使用这种方法,您可以在精灵上绘制更多的东西,这不会是完全透明的。比如说,你的 Sprite 中有一个移动的形状。使用您的方法(将 alpha 设置为 0),该形状也将是不可见的,使用这种方法,只有在精灵中绘制的矩形将是不可见的,没有别的。无论如何,如果您只需要一个能够响应鼠标事件的矩形,您可以使用任何一种方法。
  • 查看这个以获得一些参考:How to draw over a Sprite without it getting laggier(这不适合之前的评论,抱歉重复发布)
  • 任何想法为什么将 beginFill 设置为 alpha 0 我没有在该精灵上触发触摸事件? ://
  • 我最终得到了这个 - alpha 到 0.01,这使它基本上透明但仍然可以点击。我想较新的闪存与此有关,是的,正如我的同事都告诉我的“我以前做过,它必须工作”。或者它与我也有窗口和 chrome swt 到透明/无的事实有关。基本上,当您根本不知道空气甚至在运行时,我想触发事件... :) 无论哪种方式,现在都已解决。谢谢!