As3:将重叠的矩形绘制到精灵并应用 alpha
As3: Draw overlapping rectangles to a sprite and apply alpha
我需要为 sprite 绘制 独立 个矩形。但是,如果我将 alpha 应用到我的精灵(精灵将淡入淡出),重叠区域 将变得可见:
var spBox:Sprite = new Sprite();
this.addChild(spBox);
spBox.graphics.beginFill(0x123456)
spBox.graphics.drawRect(100, 100, 50, 50);
spBox.graphics.endFill();
spBox.graphics.beginFill(0x123456)
spBox.graphics.drawRect(125, 125, 50, 50);
spBox.graphics.endFill();
有没有办法 compine/flatten/merge 我的精灵的矩形?我想要一个无缝的 aplha 外观。
我怀疑图形对象的部分数据不支持这种功能。
如果两个框都是单独的 DisplayObjects
,您可以将 DisplayObjectContainer
的 .blendMode
设置为 BlendMode.LAYER,
,从而得到所需的结果。下面是一些示例代码,将矩形的绘图重构为 Box
class:
var spBox:Sprite = new Sprite();
this.addChild(spBox);
var a:Box = new Box(50, 50, 0x123456);
a.x = a.y = 100;
spBox.addChild(a);
var b:Box = new Box(50, 50, 0x123456);
b.x = b.y = 125;
spBox.addChild(b);
spBox.alpha = .5;
spBox.blendMode = BlendMode.LAYER;
Box
class 的相关部分如下所示:
public class Box extends Shape
{
public function Box(width:Number = 100, height:Number = 100, color:uint = 0)
{
graphics.beginFill(color)
graphics.drawRect(0, 0, width, height);
graphics.endFill();
}
}
我需要为 sprite 绘制 独立 个矩形。但是,如果我将 alpha 应用到我的精灵(精灵将淡入淡出),重叠区域 将变得可见:
var spBox:Sprite = new Sprite();
this.addChild(spBox);
spBox.graphics.beginFill(0x123456)
spBox.graphics.drawRect(100, 100, 50, 50);
spBox.graphics.endFill();
spBox.graphics.beginFill(0x123456)
spBox.graphics.drawRect(125, 125, 50, 50);
spBox.graphics.endFill();
有没有办法 compine/flatten/merge 我的精灵的矩形?我想要一个无缝的 aplha 外观。
我怀疑图形对象的部分数据不支持这种功能。
如果两个框都是单独的 DisplayObjects
,您可以将 DisplayObjectContainer
的 .blendMode
设置为 BlendMode.LAYER,
,从而得到所需的结果。下面是一些示例代码,将矩形的绘图重构为 Box
class:
var spBox:Sprite = new Sprite();
this.addChild(spBox);
var a:Box = new Box(50, 50, 0x123456);
a.x = a.y = 100;
spBox.addChild(a);
var b:Box = new Box(50, 50, 0x123456);
b.x = b.y = 125;
spBox.addChild(b);
spBox.alpha = .5;
spBox.blendMode = BlendMode.LAYER;
Box
class 的相关部分如下所示:
public class Box extends Shape
{
public function Box(width:Number = 100, height:Number = 100, color:uint = 0)
{
graphics.beginFill(color)
graphics.drawRect(0, 0, width, height);
graphics.endFill();
}
}