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 に答える