我在舞台上有影子剪辑,有阴影滤镜。 当我将ColorTransform应用于该影片剪辑时,阴影会移除。
var ct:ColorTransform = new ColorTransform;
ct.color = 0x99CC00;
lamp.transform.colorTransform = ct;
如何保存阴影?
答案 0 :(得分:3)
想法是
lamp
,代码:
var lampFilters:Array = lamp.filters.slice(); //save filters
lamp.filters = []; //empty filters
var ct:ColorTransform = new ColorTransform();
ct.color = 0x99CC00;
lamp.transform.colorTransform = ct; //apply your transformation
var superLamp:Sprite = new Sprite();
superLamp.addChild(lamp); //nest the clip
addChild(superLamp);
superLamp.filters = lampFilters; //re-apply the filters
答案 1 :(得分:2)
ColorTransform
将转换整个MovieClip,遗憾的是,包含了过滤器。我建议你分层lamp
并将变换应用到最顶层,保持底层(阴影)不变。
测试示例:
var ball:Sprite = new Sprite();
ball.graphics.beginFill(0x00FF00, 1);
ball.graphics.drawCircle(50, 50, 50);
ball.graphics.endFill();
ball.filters = [new DropShadowFilter()]; //default black
ball.addEventListener(MouseEvent.CLICK, changeColor);
addChild(ball);
//...
private function changeColor(evt:MouseEvent):void {
var ball:Sprite = evt.target as Sprite;
var ct:ColorTransform = new ColorTransform();
ct.color = 0x99CC00; // green-ish
ball.transform.colorTransform = ct;
ball.filters = [new DropShadowFilter(4, 45, 0xFFFFFF)]; //now white
}
即使重新应用了阴影滤镜,您也可以看到它仍然是由变换设置的绿色。
答案 2 :(得分:1)
你应该使用嵌套的显示对象来实现这个目标......
例如,你可以在另一个动画片段中创建一个动画片段。将colortransform应用于内部影片剪辑并将阴影应用于外部影片剪辑。对我来说就像一个魅力:)答案 3 :(得分:1)
这是一种不需要父对象的替代方法。您基本上使用AdjustColor和ColorMatrix来改变颜色而不是ColorTransform。
注意:如果您使用的是Flash以外的IDE,例如Flex或FlashDevelop,则需要将{flash / w / sws / flashswc'中的flash.swc包含到库中{{ 1}}包/类。你也可以谷歌swc。
fl.motion.AdjustColor