0

Actionscriptの交差点でGraphicsオブジェクトに複数の図形を描画する場合、互いに打ち消し合います。

このデフォルトの動作を無効にする方法はありますか?

図形の描画の間にbeginFill()メソッドとendFill()メソッドを簡単に使用できます。このアプローチの問題は、alphaプロパティの値を1以外に設定すると、各シェイプが「ブレンド」されることです。

基本的に私が欲しいのは、さまざまな形状(たとえば円)で構成される1つのソリッド図面です。これにより、アルファ値を変更しても、この図面のさまざまな部分が表示されなくなります。

次のアプローチは機能しませんでした。

-2つの円が描かれていますが、交差点はキャンセルされています

var solidShape = new Sprite();
solidShape.graphics.beginFill(0xFF0000)
solidShape.graphics.drawCircle(0,0,100)
solidShape.graphics.drawCircle(0,50,100)
solidShape.graphics.endFill()

-2つの円は正しく描画されますが、アルファ値を変更すると表示されます

var solidShape = new Sprite();
solidShape.graphics.beginFill(0xFF0000)
solidShape.graphics.drawCircle(0,0,100)
solidShape.graphics.endFill()
solidShape.graphics.beginFill(0xFF0000)
solidShape.graphics.drawCircle(0,50,100)
solidShape.graphics.endFill()

solidShape.alpa = 0.5
4

2 に答える 2

1

Flash は、その「ワインディング ルール」を使用して、描画のどの部分が塗りつぶされたゾーンの内側にあるかを判断します。この場合、円に対して作成されたパスは両方とも同じ方向に進み、相殺されます。

高度な描画 APIを使用すると、ワインディング ルールを変更できます。残念ながら、これは drawCircle メソッドの利便性を失うことも意味し、代わりに曲線を使用する必要があります。

Advanced Drawing API を使い始めるのに役立つガイドを次に示します。

于 2012-10-20T21:14:56.743 に答える
1

Easiest way would be to draw each shape in a separate DisplayObject, like so:

var shapes:Sprite = new Sprite();
var shape:Shape = new Shape();
shape.graphics.beginFill(0xFF0000);
shape.graphics.drawCircle(0,0,100);
shapes.addChild(shape);

shape = new Shape();
shape.graphics.beginFill(0xFF0000);
shape.graphics.drawCircle(0,50,100);
shapes.addChild(shape);

shapes.alpha = 0.5;
shapes.blendMode = "layer";

If you're trying to do it with a single object (like a user drawn shape that intersects itself), RC's answer will suit your needs much better.

于 2012-10-21T02:31:28.520 に答える