1

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

我一直在为我在 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,据我所知,它也不会发生在非渐变上(仍在擦除)。

有什么建议么?

4

1 回答 1

1

在 Flash AS3 中使用 BlendMode“擦除”时的奇怪行为

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

_circ.cacheAsBitmap = true;

这就是它的全部!

于 2012-11-23T10:23:21.033 回答