空气中混合梯度边缘的奇怪伪影

时间:2012-11-23 02:11:40

标签: actionscript-3 air gradient mask bitmapdata

UPDATE 任何混合模式都会出现这种情况 - 不仅仅是擦除

我一直在为Adobe 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)。现在这个ALMOST正常工作,除了一个小问题。

bad things

如果你仔细观察,你会看到一条非常细的黑线绕着渐变,这是非常令人沮丧的。我不知道是什么导致它 - 我已经尝试使渐变小于圆形,我尝试使其成为线性,尝试使其成为不同的颜色。除ERASE以外的混合模式也不会发生这种情况,据我所知,它也不会发生在非渐变中(仍在擦除)。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

Strange behaviour when using BlendMode "erase" in flash AS3

不知怎的,我在之前的搜索中错过了这个,猜测我没有使用正确的关键字。解决方案是在用作“擦除器”的子画面上将位图缓存设置为true。例如:

_circ.cacheAsBitmap = true;

这就是它的全部内容!