ActionScript 3 - нарисуйте две фигуры на графике одного и того же фрагмента ролика, избегая альфа-смешения между ними - PullRequest
0 голосов
/ 07 сентября 2010

например:

var mc:MovieClip=new MovieClip();

mc.graphics.beginFill(0x000000,0.5);
mc.graphics.drawRect(0,0,100,100);
mc.graphics.endFill();

mc.graphics.beginFill(0x000000,0.5);
mc.graphics.drawRect(0,0,100,100);
mc.graphics.endFill();

с этим я получу коробку с альфа-значением темнее, чем 0,5.Я хочу 0,5 альфа-квадрата без использования чего-то вроде:

var mc:MovieClip=new MovieClip();

mc.graphics.beginFill(0x000000,1);
mc.graphics.drawRect(0,0,100,100);
mc.graphics.endFill();

mc.graphics.beginFill(0x000000,1);
mc.graphics.drawRect(0,0,100,100);
mc.graphics.endFill();

var bmp:BitmapData=new BitmapData(100,100);
bmp.draw(mc);
var mc2:MovieClip=new MovieClip();
mc2.graphics.beginBitmapFill(bmp);
mc2.graphics.drawRect(0,0,100,100);
mc2.graphics.endFill();

очевидно, что я не хочу его для рисования квадратов, это для алгоритма отбрасывания тени, над которым я работаю.

Ответы [ 2 ]

1 голос
/ 07 сентября 2010

В зависимости от того, что вы делаете, вы можете просто нарисовать все как альфа 1, установить альфа самого объекта на 0.5, а затем использовать режим смешивания LAYER, который выравнивает прозрачность перед применением альфа.

var mc:MovieClip = new MovieClip();
addChild(mc);

var sp:Shape;

sp = new Shape();
sp.graphics.beginFill(0x000000,1);
sp.graphics.drawRect(0,0,100,100);
sp.graphics.endFill();
mc.addChild(sp);

sp = new Shape();
sp.graphics.beginFill(0x000000,1);
sp.graphics.drawRect(50,50,100,100);
sp.graphics.endFill();
mc.addChild(sp);

mc.alpha = 0.5;
mc.blendMode = BlendMode.LAYER;

Это немного запутанно, но вы поняли.

Хотя использование растрового изображения было бы лучшим для производительности. Опять же, это зависит от того, что именно вы должны реализовать и как.

Кроме того, в зависимости от того, что вы рисуете, если вы можете вместо этого полагаться на drawPath () , вы можете просто использовать его с обмоткой, установленной на GraphicsPathWinding.NON_ZERO .

0 голосов
/ 07 сентября 2010

Вместо использования альфа вы можете использовать ColorTransform.С TweenMax это довольно просто, но, конечно, вы можете написать собственное решение.

var mc:MovieClip=new MovieClip();
mc.graphics.beginFill(0xffffff); mc.graphics.drawRect(0,0,100,100); mc.graphics.endFill();
TweenMax.to( mc , 0 , {colorTransform:{tint:0x000000 , tintAmount:.5}} );

mc.graphics.beginFill(0xffffff); mc.graphics.drawRect(0,0,100,100); mc.graphics.endFill();
TweenMax.to( mc , 0 , {colorTransform:{tint:0x000000 , tintAmount:.5}} );
...