Home > Software engineering >  Applying double color transform in AS3
Applying double color transform in AS3

Time:07-04

Simply put, I would like to set several movieclips to different specific colors and then apply a tint over them.

var color1 = new ColorTransform(); color1.color = 0x0000FF;
var color2 = new ColorTransform(); color2.color = 0x00FF00;
var color3 = new ColorTransform(); color3.color = 0xFFFF00;

thing1.transform.colorTransform = color1;
thing2.transform.colorTransform = color2;
thing3.transform.colorTransform = color3;

thing1.transform.colorTransform = new ColorTransform(1, 1, 1, 1, 0, 200, 150, 0);
thing2.transform.colorTransform = new ColorTransform(1, 1, 1, 1, 0, 200, 150, 0);
thing3.transform.colorTransform = new ColorTransform(1, 1, 1, 1, 0, 200, 150, 0);

unfortunately the colortransform resets the value. Any way to keep the value of the first color transform?

CodePudding user response:

You should be able to do that with the ColorTransform.concat() function.

var color1 = new ColorTransform(); color1.color = 0x0000FF;
var color2 = new ColorTransform(); color2.color = 0x00FF00;
var color3 = new ColorTransform(); color3.color = 0xFFFF00;

color1.concat( new ColorTransform(1, 1, 1, 1, 0, 200, 150, 0) );
color2.concat( new ColorTransform(1, 1, 1, 1, 0, 200, 150, 0) );
color3.concat( new ColorTransform(1, 1, 1, 1, 0, 200, 150, 0) );

thing1.transform.colorTransform = color1;
thing2.transform.colorTransform = color2;
thing3.transform.colorTransform = color3;

Which essentially is the same as (clamping offset values to 255 using Math.min):

thing1.transform.colorTransform = new ColorTransform(1*1, 1*1, 1*1, 1*1, Math.min(0x00 0, 0xFF), Math.min(0x00 200, 0xFF), Math.min(0xFF 150, 0xFF), Math.min(0x00 0, 0xFF));
thing2.transform.colorTransform = new ColorTransform(1*1, 1*1, 1*1, 1*1, Math.min(0x00 0, 0xFF), Math.min(0xFF 200, 0xFF), Math.min(0x00 150, 0xFF), Math.min(0x00 0, 0xFF));
thing3.transform.colorTransform = new ColorTransform(1*1, 1*1, 1*1, 1*1, Math.min(0xFF 0, 0xFF), Math.min(0xFF 200, 0xFF), Math.min(0x00 150, 0xFF), Math.min(0x00 0, 0xFF));

Or:

thing1.transform.colorTransform = new ColorTransform(1, 1, 1, 1, 0x00, 0xC8, 0xFF, 0x00);
thing2.transform.colorTransform = new ColorTransform(1, 1, 1, 1, 0x00, 0xFF, 0x96, 0x00);
thing3.transform.colorTransform = new ColorTransform(1, 1, 1, 1, 0xFF, 0xFF, 0x96, 0x00);

CodePudding user response:

I've found a solution to this problem.

If I set an object to a color

var color1 = new ColorTransform(); color1.color = 0x0000FF;
thing1.transform.colorTransform = color1;

I can then edit the blue and green values as so to get my desired tint

color1.blueOffset =200;
color1.greenOffset =150;

And then use colortransform on the object to set the new color

thing1.transform.colorTransform = color1;
  • Related