在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
答案 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的回答将更好地满足您的需求。