0

例如:

var mc:MovieClip=new MovieClip();

mc.graphics.beginFill(0x000000,0.5);
mc.graphics.drawRect(0,0,100,100);
mc.graphics.endFill();

mc.graphics.beginFill(0x000000,0.5);
mc.graphics.drawRect(0,0,100,100);
mc.graphics.endFill();

有了这个,我会得到一个 alpha 值小于 0.5 的框。我想要一个 0.5 alpha 正方形而不使用类似的东西:

var mc:MovieClip=new MovieClip();

mc.graphics.beginFill(0x000000,1);
mc.graphics.drawRect(0,0,100,100);
mc.graphics.endFill();

mc.graphics.beginFill(0x000000,1);
mc.graphics.drawRect(0,0,100,100);
mc.graphics.endFill();

var bmp:BitmapData=new BitmapData(100,100);
bmp.draw(mc);
var mc2:MovieClip=new MovieClip();
mc2.graphics.beginBitmapFill(bmp);
mc2.graphics.drawRect(0,0,100,100);
mc2.graphics.endFill();

显然我不希望它用于绘制正方形,它用于我正在研究的阴影投射算法。

4

2 回答 2

1

根据您的操作,您可以将所有内容绘制为 alpha 1,将对象本身的 alpha 设置为 0.5,然后使用 LAYER 混合模式在应用 alpha 之前将透明度变平。

var mc:MovieClip = new MovieClip();
addChild(mc);

var sp:Shape;

sp = new Shape();
sp.graphics.beginFill(0x000000,1);
sp.graphics.drawRect(0,0,100,100);
sp.graphics.endFill();
mc.addChild(sp);

sp = new Shape();
sp.graphics.beginFill(0x000000,1);
sp.graphics.drawRect(50,50,100,100);
sp.graphics.endFill();
mc.addChild(sp);

mc.alpha = 0.5;
mc.blendMode = BlendMode.LAYER;

这有点令人费解,但你明白了。

不过,使用位图对性能来说是最好的。同样,这取决于您必须实施什么以及如何实施。

此外,根据您必须绘制的内容,如果您可以改用drawPath() ,则可以将其与设置为GraphicsPathWinding.NON_ZERO的绕组一起使用。

于 2010-09-07T14:56:53.977 回答
0

您可以使用 ColorTransform,而不是使用 alpha。使用 TweenMax 非常简单,但您当然可以编写自己的解决方案。

var mc:MovieClip=new MovieClip();
mc.graphics.beginFill(0xffffff); mc.graphics.drawRect(0,0,100,100); mc.graphics.endFill();
TweenMax.to( mc , 0 , {colorTransform:{tint:0x000000 , tintAmount:.5}} );

mc.graphics.beginFill(0xffffff); mc.graphics.drawRect(0,0,100,100); mc.graphics.endFill();
TweenMax.to( mc , 0 , {colorTransform:{tint:0x000000 , tintAmount:.5}} );
于 2010-09-07T03:09:46.830 回答