2011-07-21 10 views
0

私は複数のオブジェクト(DisplayObjectsとして表現されています)を互いにブレンドしたいと思います。バックグラウンドではなくバックグラウンドでオブジェクト同士をブレンドするactionscript 3

しかし、これらのオブジェクトの背後には、ブレンドに関与したくない背景があります。

基本的に私はこれらのオブジェクトをお互いにブレンドし、その後このブレンドの結果を新しい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); 

これでdiddentは私をどこにでも連れてきます。 何か助けていただければ幸いです。

EDIT:あなたは、コンテナにオブジェクトを入れて、ステージからそれを削除した場合、あなたはその後、BitmapDataクラスとそれを描き、新しいビットマップオブジェクトを作成することができ、最後のコードスニペット

答えて

1

にスプライトへのDisplayObjectContainerを変更その組み合わせを表す。これは透明な背景を持ち、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); 

(未テストコード、幸運)

+0

まさに私が必要なもの、感謝!コードは実行可能ではありません(DisplayObjectContainerは抽象クラスであるため、Spriteインスタンスにする必要があります)、あなたの追加はうまくいきます。 – Antiz

0

、フラッシュ層をラスタライズさせ、それが自動的に子どものオプションがあります。試してみてください:

container.cacheAsBitmap = true; 

か試してみてください。

container.blendMode = "layer"; 

か試してみてください。

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

これらのオプションのどれが個々のブレンドを無効に、子どもたちはボンネットの下にビットマップに描画するようになりますモード/エフェクトを背景に適用します。

関連する問題