【问题标题】:Strange Artifacts on Edge of Blended Gradient in AIRAIR中混合渐变边缘的奇怪伪影
【发布时间】:2012-11-23 02:11:39
【问题描述】:

更新似乎任何混合模式都会发生这种情况 - 不仅仅是擦除

我一直在为我的 Adob​​e AIR 游戏开发一个粗略的光照引擎,它是用纯 AS3 编写的。它的工作原理是有一个屏幕大小的位图数据,并且在每一帧的开始它被设置为一个黑色透明矩形。在这一步中,可以从位图数据中减去一些东西,然后当它在屏幕上绘制时,这些区域会显得更亮。

设置好了,一切都很顺利。目前我正在处理来自光源的基本径向渐变,设置起来非常简单

_circ.graphics.lineStyle();
_circ.graphics.beginGradientFill(GradientType.RADIAL, [0x000000, 0x000000], [.9, 0], [0, 255]);
_circ.graphics.drawCircle(0, 0, 100);
_circ.graphics.endFill()

然后将其绘制(嗯,反绘制)到位图数据上,我只是这样做

FP.matrix.identity();
FP.matrix.tx = x + 30;
FP.matrix.ty = y + 5;
WorldGame.darkBit.draw(_circ, FP.matrix, null, BlendMode.ERASE, null, true);
FP.matrix.identity();

FP.matrix 只是一个通用的全局矩阵(我使用的是 Flashpunk)。现在这几乎可以工作了,除了一个小问题。

如果您仔细观察,您将能够看到渐变周围有一条非常细的黑线,这非常令人沮丧。我不知道是什么原因造成的——我试着让渐变比圆更小,我试着让它变成线性的,试着让它变成不同的颜色。除了ERASE 之外的混合模式也不会发生这种情况,据我所知,非渐变也不会发生这种情况(仍在擦除)。

有什么建议吗?

【问题讨论】:

  • 尝试将线型颜色改为红色,是否可见?
  • @alxx 抱歉,这没用。
  • 好的,linestyle 中 0 的 alpha 也没有任何变化?
  • 嗯,这条线是可见的,但它都是颗粒状的,并且充满了奇怪的伪影,就像示例中的细线一样 - 只是更粗。奇怪的是 alpha 设置为 0
  • 也许是个愚蠢的想法,但是……如果你增加圆的半径呢?渐变由 beginGradientFill 参数控制,因此不会受到影响。当然,这可能会降低性能。如果那条边从窗外出来,那就没问题了。

标签: actionscript-3 air gradient mask bitmapdata


【解决方案1】:

Strange behaviour when using BlendMode "erase" in flash AS3

不知何故,我在之前的搜索中错过了这个,我猜我没有使用正确的关键字。解决方案只是在用作“橡皮擦”的精灵上将位图缓存设置为 true。例如:

_circ.cacheAsBitmap = true;

仅此而已!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 2015-11-03
    • 1970-01-01
    • 1970-01-01
    • 2014-08-16
    • 1970-01-01
    相关资源
    最近更新 更多