ColorTransform删除阴影

时间:2011-03-23 15:55:12

标签: actionscript-3

我在舞台上有影子剪辑,有阴影滤镜。 当我将ColorTransform应用于该影片剪辑时,阴影会移除。

        var ct:ColorTransform = new ColorTransform;
        ct.color = 0x99CC00;
        lamp.transform.colorTransform = ct;

如何保存阴影?

4 个答案:

答案 0 :(得分:3)

想法是

  1. 保存剪辑lamp
  2. 的过滤器(阴影)
  3. 应用转换,
  4. 将剪辑放入主剪辑和
  5. 将过滤器重新应用于此未转换的父级。
  6. 代码:

    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