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

时间:2012-10-20 20:31:10

标签: actionscript-3 graphics alpha

在Actionscript中的Graphics对象上绘制多个形状时,交叉点会相互取消。

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

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

基本上我想要的是1个由不同形状(例如圆圈)组成的实体图,因此当更改alpha值时,此图形的不同部分不应该变得可见。

以下方法不起作用:

绘制了

-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个圆圈,但是当我更改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

2 个答案:

答案 0 :(得分:1)

Flash使用“winding rules”确定图形的哪些部分位于填充区域内。在这种情况下,为圆圈创建的路径都朝着相同的方向,这使得它们被取消。

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

这里的a guide可能会帮助您开始使用Advanced Drawing API。

答案 1 :(得分:1)

最简单的方法是在单独的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的回答将更好地满足您的需求。