ColorTransform удаляет тень - PullRequest
       1

ColorTransform удаляет тень

1 голос
/ 23 марта 2011

У меня есть клип на сцене с теневым фильтром. Когда я применяю ColorTransform к этому мувиклипу, тень удаляется.

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

Как сохранить тень?

Ответы [ 4 ]

3 голосов
/ 23 марта 2011

Идея заключается в

  1. сохранить фильтры (тени) вашего клипа lamp,
  2. применить преобразование,
  3. поместите клип в мастер-клип и
  4. повторно применить фильтры к этому нетрансформированному родителю.

Код:

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
2 голосов
/ 23 марта 2011

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
}

Даже при повторном применении фильтра теней вы можете видеть, что он все еще будет зеленоватым, как установлено преобразованием.

1 голос
/ 21 декабря 2011

Вот альтернативный метод, который не требует родительского объекта.Вы в основном используете AdjustColor и ColorMatrix, чтобы изменить цвет вместо ColorTransform.

Примечание. Если вы используете IDE, отличную от Flash, например Flex или FlashDevelop, вам необходимо включить flash.swc в свою библиотеку из файла «Common / Configuration / ActionScript 3.0 / libs / flash.swc»fl.motion.AdjustColor пакет / класс.Вы также можете Google SWC.

    var mc:Sprite = new Sprite();
    mc.graphics.beginFill(0xFF0000);
    mc.graphics.drawCircle(100, 100, 100);
    mc.graphics.endFill();
    addChild(mc); 

    // White out the entire shape first
    var whiteAC:AdjustColor = new AdjustColor();
    whiteAC.brightness = 100;
    whiteAC.contrast = 100;
    whiteAC.saturation = -100;
    whiteAC.hue = 0;            
    var whiteMatrix:Array = whiteAC.CalculateFinalFlatArray();
    var whiteCMF:ColorMatrixFilter = new ColorMatrixFilter(whiteMatrix);

    // Now use ColorMatrixFilter to change color
    var colorMatrix:Array = hexToMatrix(0x0000FF);
    var colorCMF:ColorMatrixFilter = new ColorMatrixFilter(colorMatrix);

    // Create Drop Shadow 
    var myDropShadow:DropShadowFilter = new DropShadow();

    mc.filters = [whiteCMF, colorCMF, myDropShadow];

    function hexToMatrix ( hex:uint, alpha:Number = 1 ) 
    {
        var r:Number = ((hex & 0xFF0000) >> 16);
        var g:Number = ((hex & 0x00FF00) >> 8);
        var b:Number = ((hex & 0x0000FF));

        var matrix:Array = [];
        matrix = matrix.concat([r, 0, 0, 0, 0]); // red
        matrix = matrix.concat([0, g, 0, 0, 0]); // green
        matrix = matrix.concat([0, 0, b, 0, 0]); // blue
        matrix = matrix.concat([0, 0, 0, alpha, 0]); // alpha
        return matrix;
    }
1 голос
/ 20 декабря 2011

Вы должны использовать вложенные экранные объекты для достижения этого ...

например, вы можете создать мувиклип в другом мувиклипе.примените colortransform к внутреннему фрагменту ролика и примените тень к внешнему фрагменту ролика.работает как шарм для меня :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...