【问题标题】:erasing sprite graphics?擦除精灵图形?
【发布时间】:2009-05-06 03:10:29
【问题描述】:

如果我有一个精灵,我用它绘制了一些东西,我如何擦除我绘制的部分内容?最好我可以将drawRect() 与一些“alpha=0”油漆一起使用。

但是,我不相信 beginFill() 方法可以让您设置 RGBA 颜色(就像在 bitmapData 中一样)。在beginFill() 的图形方法中设置alpha = 0 并没有真正做任何事情——它只是什么都不画。

在我的特定用例中,屏蔽不是一种选择。

此外,调用clear() 也不是一个好的解决方案,因为它会清除所有内容。

【问题讨论】:

    标签: flash actionscript-3 actionscript


    【解决方案1】:

    如果您不需要与 Sprite 下的任何元素进行交互,则可以很好地实现这一点。

    这样做

    1. 在你想要的形状中创建一个Shape对象并将其cacheAsBitmap属性设置为true
    2. 将 Sprite 的 cacheAsBitmap 属性设置为 true
    3. 将 Shape 的 blendMode 属性设置为 BlendMode.ERASE
    4. 将形状添加到 Sprite 的显示列表中

    【讨论】:

    • 这对我很有帮助,谢谢.. :) ,,
    【解决方案2】:

    不幸的是,您不能完全按照您希望对 Graphics 类进行的操作。虽然擦除可能意味着您使用背景颜色绘制了已经绘制的内容,但我猜您希望将透明度“绘制”回 Graphics 对象。使用 0 的 alpha 进行绘制并不是“什么都没有”——你只是看不到你所绘制的内容,因为它是完全透明的。

    这是您使用矢量而不是位图所获得的结果。 “擦除”矢量的一部分意味着您正在创建一个全新的矢量,这将需要一些计算,而不仅仅是将某个像素设置为某个颜色值。 Graphics 不提供这种高级功能,尽管您当然可以编写自己的函数来完成它。 :P

    一种解决方法是改用位图:
    http://www.actionscript.org/forums/showthread.php3?t=187857
    http://www.actionscripts.org/forums/showthread.php3?t=149021

    另一个是考虑您是否可以以不同的方式实现您正在尝试做的事情;一种适合使用 clear() 的方法。

    【讨论】:

      【解决方案3】:

      如果您希望保留部分绘图同时擦除其他部分,那么唯一可行的方法是使用多个精灵进行绘制。 为绘图的每个部分创建一个精灵,然后您可以选择要擦除的精灵并保留其余部分。

      除此之外,您剩下的就是使用位图数据复制部分,然后在使用 clear 后再次绘制复制的部分。 (这在复杂的庄园很难实现,试着只复制一个复杂的弯曲区域!)

      【讨论】:

        猜你喜欢
        • 2013-08-04
        • 2011-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多