0

我有许多希望相互融合的对象(表示为 DisplayObjects)。

然而,在这些对象背后有一个我不想参与混合的背景。

所以基本上我想将这些对象相互混合,然后将这种混合的结果用作新的 DisplayObject(例如将其放在随机彩色背景的顶部)。

所以我有的是:

var obj1:DisplayObject = getFirstObj();
var obj2:DisplayObject = getSecObj();
var background:DisplayObject = getBackground();

obj1.blendMode = BlendMode.ADD;
obj2.blendMode = BlendMode.ADD;

我尝试的第一次尝试是将这些对象放入一个通用的 DisplayObjectContainer 中,希望混合模式仅与同一个 DisplayObjectContainer 包含的所有对象相关,但情况似乎并非如此。

var objectsPool:Sprite = new Sprite();
objectsPool.addChild( obj1 );
objectsPool.addChild( obj2 );

addChild( background );
addchild( objectsPool );

所以这并没有让我到任何地方。任何帮助表示赞赏。

编辑:在最后一个代码片段中将 DisplayObjectContainer 更改为 Sprite

4

2 回答 2

1

如果将对象放入容器中,然后将其从舞台中移除,则可以使用 BitmapData 类绘制它并创建一个表示组合的新 Bitmap 对象。这将有一个透明的背景,它的 blendMode 将是正常的,允许您在背景上使用它。

var obj1:DisplayObject = getFirstObj();
var obj2:DisplayObject = getSecObj();
var background:DisplayObject = getBackground();

obj1.blendMode = BlendMode.ADD;
obj2.blendMode = BlendMode.ADD;

var objectsPool:DisplayObjectContainer = new DisplayObjectContainer();
objectsPool.addChild( obj1 );
objectsPool.addChild( obj2 );

var bmd:BitmapData = new BitmapData(objectsPool.width,objectsPool.height,true,0);
bmd.draw(objectsPool);

var drawnObject:Bitmap = new Bitmap(bmd);

addChild( background );
addchild( drawnObject );

(未经测试的代码,祝你好运)

于 2011-07-21T00:28:37.073 回答
0

与其自己努力绘制位图,还有一些选项可以使 Flash 自动栅格化图层并且它是子图层。尝试:

container.cacheAsBitmap = true;

或尝试:

container.blendMode = "layer";

或尝试:

container.filters = [new GlowFilter(0,0,0,0)];

这些选项中的任何一个都应该导致孩子在引擎盖下渲染为位图,从而使他们在背景上的单独混合模式/效果无效。

于 2012-02-17T23:42:50.753 回答