【发布时间】:2012-11-23 02:11:39
【问题描述】:
更新似乎任何混合模式都会发生这种情况 - 不仅仅是擦除
我一直在为我的 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)。现在这几乎可以工作了,除了一个小问题。
如果您仔细观察,您将能够看到渐变周围有一条非常细的黑线,这非常令人沮丧。我不知道是什么原因造成的——我试着让渐变比圆更小,我试着让它变成线性的,试着让它变成不同的颜色。除了ERASE 之外的混合模式也不会发生这种情况,据我所知,非渐变也不会发生这种情况(仍在擦除)。
有什么建议吗?
【问题讨论】:
-
尝试将线型颜色改为红色,是否可见?
-
@alxx 抱歉,这没用。
-
好的,linestyle 中 0 的 alpha 也没有任何变化?
-
嗯,这条线是可见的,但它都是颗粒状的,并且充满了奇怪的伪影,就像示例中的细线一样 - 只是更粗。奇怪的是 alpha 设置为 0
-
也许是个愚蠢的想法,但是……如果你增加圆的半径呢?渐变由 beginGradientFill 参数控制,因此不会受到影响。当然,这可能会降低性能。如果那条边从窗外出来,那就没问题了。
标签: actionscript-3 air gradient mask bitmapdata