例如:
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();
有了这个,我将得到一个暗于0.5的alpha值的盒子。我想要一个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();
obvoiusly我不希望它用于绘制正方形,它用于我正在进行的阴影投射算法。
答案 0 :(得分: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。
答案 1 :(得分: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}} );