Flash 动作脚本3-在同一个电影剪辑上绘制两个形状';s图形避免它们之间的alpha混合

Flash 动作脚本3-在同一个电影剪辑上绘制两个形状';s图形避免它们之间的alpha混合,flash,actionscript-3,actionscript,alphablending,Flash,Actionscript 3,Actionscript,Alphablending,例如: 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(); 有了这个,我会得到一个alpha值比0

例如:

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();
有了这个,我会得到一个alpha值比0.5暗的盒子。我想要一个0.5 alpha正方形,但不使用以下内容:

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();

显然,我不希望它用于绘制正方形,而是用于我正在研究的阴影投射算法。

您可以使用ColorTransform而不是alpha。使用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}} ); var mc:MovieClip=新的MovieClip(); mc.graphics.beginll(0xffffff);mc.graphics.drawRect(0,0100);mc.graphics.endFill(); TweenMax.to(mc,0,{colorTransform:{tint:0x000000,tintmount:.5}); mc.graphics.beginll(0xffffff);mc.graphics.drawRect(0,0100);mc.graphics.endFill(); TweenMax.to(mc,0,{colorTransform:{tint:0x000000,tintmount:.5});
根据您正在执行的操作,您可以将所有内容绘制为alpha 1,将对象本身的alpha设置为0.5,然后使用图层混合模式,在应用alpha之前将透明度展平

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;
这有点复杂,但你明白了

不过,使用位图对性能来说是最好的。同样,这完全取决于您必须实现什么以及如何实现


此外,根据您必须绘制的内容,如果您可以依赖,您可以将其与winding设置为一起使用。

hi,应用颜色变换不起作用。mc.transform.colorTransform=新的colorTransform(1,1,1,5);产生与以前相同的结果。。。也许没有办法改变flash管理alpha的方式,就像将alpha属性设置为.5一样,这就是为什么我使用TweenMax(greensock.com)作为更改颜色量的快捷方式。嗯,是的,你是对的:)。。。但我意识到,在位图上渲染整个精灵,然后使用copypixels和alphabitmap修改alpha比渲染精灵本身要快(我的应用程序使用375x275画布以2倍缩放速度运行)哇!,是的,这就是我正在寻找的,但是速度很慢,6个FPS与BITMAPATH D的35个FPS相比:设置父级上的CaseScript位图可能会使它们性能达到标准,除非你正在旋转和缩放。