0

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

有没有办法禁用这种默认行为?

我可以在绘图形状之间简单地使用 beginFill() 和 endFill() 方法。这种方法对我来说的问题是,每当我将 alpha 属性的值设置为 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
4

2 回答 2

1

Flash 通过其“缠绕规则”确定绘图的哪些部分位于填充区域内。在这种情况下,为圆圈创建的路径都朝着相同的方向,这使得它们相互抵消。

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

这是一个指南,可以帮助您开始使用高级绘图 API。

于 2012-10-20T21:14:56.743 回答
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 的答案将更好地满足您的需求。

于 2012-10-21T02:31:28.520 回答