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();

これにより、アルファ値が0.5よりも暗いボックスが表示されます。次のようなものを使用せずに0.5アルファの正方形が必要です。

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

何をしているかに応じて、すべてをアルファ1として描画し、オブジェクト自体のアルファを0.5に設定してから、アルファを適用する前に透明度を平坦化するLAYERブレンディングモードを使用できます。

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に設定されたwindingで使用できます。

于 2010-09-07T14:56:53.977 に答える
0

alphaを使用する代わりに、ColorTransformを使用できます。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 に答える