Ho cercato di rendere il codice più chiaro possibile così si capisce cosa fa
codice:
// riceve come parametri il colore iniziale,
// il colore finale, e il numero di passaggi
// compresi il primo e l'ultimo: restituisce
// un array di colori
function coloriIntermedi(iniziale, finale, passaggi)
{
// scomponi il colore iniziale nei canali rgb
var inirgb = {
r: iniziale >> 16 & 0xFF,
g: iniziale >> 8 & 0xFF,
b: iniziale >> 0 & 0xFF
}
// scomponi il colore finale nei canali rgb
var finrgb = {
r: finale >> 16 & 0xFF,
g: finale >> 8 & 0xFF,
b: finale >> 0 & 0xFF
}
// trova le distanze
var delta = {
r: (finrgb.r - inirgb.r) / (passaggi - 1),
g: (finrgb.g - inirgb.g) / (passaggi - 1),
b: (finrgb.b - inirgb.b) / (passaggi - 1)
}
// crea l'array di colori
var c = new Array(), r, g, b
for(var i = 0; i < passaggi; i++)
{
r = (inirgb.r + (delta.r * i));
g = (inirgb.g + (delta.g * i));
b = (inirgb.b + (delta.b * i));
c.push(r << 16 | g << 8 | b);
}
return c;
}
var colori = coloriIntermedi(0x0099AA, 0x33CCDD, 4);
// ===============================
// da qui in sotto è solo per test
// ===============================
var colorituoi = [0x0099AA, 0x11AABB, 0x22BBCC, 0x33CCDD];
function createQuad(d, x, y)
{
var mc = this.createEmptyMovieClip("mc" + d, d);
mc._x = x;
mc._y = y;
mc.beginFill(0x000000, 100);
mc.lineTo(50, 0 );
mc.lineTo(50, 50);
mc.lineTo(0 , 50);
mc.lineTo(0 , 0 );
mc.endFill();
return mc;
}
for(var i = 0; i < colori.length; i++)
{
new Color(createQuad(i, 50 * i, 0)).setRGB(colori[i]);
new Color(createQuad(i + 10, 50 * i, 50)).setRGB(colorituoi[i]);
}