Actionscript 3 防止图形中的交点相互抵消-Actionscript

Actionscript 3 防止图形中的交点相互抵消-Actionscript,actionscript-3,graphics,alpha,Actionscript 3,Graphics,Alpha,在Actionscript中在图形对象上绘制多个形状时,交叉点相互抵消 有没有办法禁用此默认行为 我可以在绘图形状之间简单地使用beginFill()和endFill()方法。对于我来说,这种方法的问题是,每当我将alpha属性的值设置为除1以外的任何值时,每个形状都会“混合在一起” 基本上我想要的是一个由不同形状(例如圆形)组成的实体图形,这样当alpha值更改时,该图形的不同部分不应可见 以下方法不起作用: -绘制了两个圆,但取消了交点 var solidShape = new Sprite

在Actionscript中在图形对象上绘制多个形状时,交叉点相互抵消

有没有办法禁用此默认行为

我可以在绘图形状之间简单地使用beginFill()和endFill()方法。对于我来说,这种方法的问题是,每当我将alpha属性的值设置为除1以外的任何值时,每个形状都会“混合在一起”

基本上我想要的是一个由不同形状(例如圆形)组成的实体图形,这样当alpha值更改时,该图形的不同部分不应可见

以下方法不起作用:

-绘制了两个圆,但取消了交点

var solidShape = new Sprite();
solidShape.graphics.beginFill(0xFF0000)
solidShape.graphics.drawCircle(0,0,100)
solidShape.graphics.drawCircle(0,50,100)
solidShape.graphics.endFill()
-正确绘制了两个圆,但当我更改alpha值时,它们将可见

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

Flash确定图形的哪些部分位于填充区域的内部,填充区域为“”。在这种情况下,为圆创建的路径都指向同一方向,这使它们相互抵消

如果使用,可以更改缠绕规则。不幸的是,这也意味着您失去了drawCircle方法的便利性,您将不得不使用曲线


以下内容可能有助于您开始使用高级绘图API。

最简单的方法是在单独的DisplayObject中绘制每个形状,如下所示:

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";

如果您尝试使用单个对象(如用户绘制的自身相交的形状),RC的答案将更好地满足您的需要。

这将产生与问题中描述的第二种方法相同的结果。应用alpha=0.5后,两个形状都将变得可见。是的,对不起,我忘了写blendmode。。。“层”就可以了;)那样的话,我同意。编辑来得有点太晚了,因为我自己刚刚发现并发布了答案;)