Objet Color, hexadécimal et transitions

Portrait de titouille

Un petit code sans prétention, pour choisir une couleur de base, puis une couleur d'arrivée, et faire la transition Smile

merci à calvin pour l'exemple de base, et à kiroukou sur media-box pour le code de transformation d'une couleur hexa en valeurs r, g et b.

// création d'un clip et remplissage en noir
//
_root.createEmptyMovieClip("essai", 1);
essai.lineStyle(1, 0x000000, 100);
essai.beginFill(0x000000, 100);
essai.moveTo(400, 200);
essai.lineTo(300, 200);
essai.lineTo(300, 300);
essai.lineTo(400, 300);
essai.lineTo(400, 200);
essai.endFill();
 
 
// création de la couleur de base
//
var myOldColor = 0xFF0000;
 
 
// affectation de la couleur de base au clip
//
couleur = new Color(essai);
couleur.setRGB(myOldColor);
 
 
// récupération des valeurs RGB de la couleur 
// de base à partir de l'hexadécimal
//
var oldR = (0xFF0000 & myOldColor) >> 16 ;
var oldG = (0x00FF00 & myOldColor) >> 8 ;
var oldB = (0x0000FF & myOldColor);
 
 
// récupération des valeurs RGB de la couleur 
// à appliquer à partir de l'hexadécimal
//
var myNewColor = 0x990000;
var newR = (0xFF0000 & myNewColor) >> 16;
var newG = (0x00FF00 & myNewColor) >> 8;
var newB = (0x0000FF & myNewColor);
 
 
// création d'un objet pour la transformation
//
myCT = new Object();
myCT.ra = 100;
myCT.rb = oldR;
myCT.ga = 100;
myCT.gb = oldG;
myCT.ba = 100;
myCT.bb = oldB;
myCT.aa = 100;
myCT.ab = 255;
 
 
// transition avec un onEnterFrame
//
this.onEnterFrame = function() 
	{
	// valeurs finales
	//
	var flag1:Boolean, flag2:Boolean, flag3:Boolean;
 
 
	// tests des valeurs RGB
	//
	var tab = testValor( myCT.rb, newR, 10 )
	myCT.rb = tab[0]
	flag1 = tab[1];
	tab = testValor( myCT.gb, newG, 10 )
	myCT.gb = tab[0]
	flag2 = tab[1];
	tab = testValor( myCT.bb, newB, 10 )
	myCT.bb = tab[0]
	flag3 = tab[1];
 
 
	// application de la couleur
	//
	couleur.setTransform(myCT);
	if (flag1 && flag2 && flag3)
		delete( this.onEnterFrame );
	}
 
 
function testValor(val, oldVal, crement)
	{
	if( val > oldVal)	return minus( val, crement, oldVal );
	else if (val < oldVal)	return plus( val, crement, oldVal );
	else 			return [val, true];
	}
 
 
function minus( val, decrement, min)
	{
	var flag = false;
	if( val > min )
		{
		if (val - min < decrement)	val = val - (val - min);
		else 				val -= decrement;
		}
	else
		{
		val = min;
		flag = true;
		}
	return [val, flag];
	}
 
 
function plus(val, increment, max)
	{
	if( val < max )
		{
		if (max - val < increment)	val = val + (max - val);
		else 				val += increment;
		flag = false
		}
	else
		{
		val = max;
		flag = true;
		}
	return [val, flag];
	}





Salut titouille Smile
Content que ce petit bout de code ait servi. Ce genre d'opérations binaires sont utiles, et le fait d'avoir fais de l'assembleur devient un avantage Wink
BOnne continuation
++

Yep y a un set de classes qui fait ça tt seul pour toi c'est magique, juste un poils bugué sur les actions onRollOver, mais pas eu le temps d'aller voir plus loin Wink

http://laco.wz.cz/tween/