Смешивание объектов друг с другом, но не с фоновым действием. 3 - PullRequest
0 голосов
/ 21 июля 2011

У меня есть несколько объектов (представленных как 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 в последнем фрагменте кода

Ответы [ 2 ]

1 голос
/ 21 июля 2011

Если вы поместите объекты в контейнер и удалите его со сцены, вы можете нарисовать его с помощью класса 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 );

(непроверенный код, удачи)

0 голосов
/ 18 февраля 2012

Вместо того, чтобы рисовать растровое изображение самостоятельно, есть опции, которые заставляют Flash растеризовать слой и его дочерние элементы автоматически.Попробуйте:

container.cacheAsBitmap = true;

или попробуйте:

container.blendMode = "layer";

или попробуйте:

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

Любой из этих параметров должен привести к тому, что дочерние элементы будут отображаться в растровое изображение подкапюшон, лишающий законной силы их отдельные режимы наложения / эффекты на фоне.

...