Hola,
Estoy tratando de cambiar el fondo de mi película, dependiendo de la sección a la que se vaya, pero necesito que el cambio de color sea gradual, en transición y no de golpe. Copié el codigo de un ejercicio que hice en el 2000 sobre Flash 4. El detalle es que ahora lo estoy tratando de usar en el MX2004 y por alguna razón no funciona... yo ya me quemé las pestañas tratando de averiguar que está fallando y no le hallo. Hace el cambio de color, pero sin las transiciones.
Este es el código que le asigno al mc que debe cambiar de color:
onClipEvent (load)
{
raa = 0;
baa = 0;
gaa = 0;
init();
myColor = new Color(this);
myColor.setRGB(parseInt(startcolor,16));
function init ()
{
startcolor = "FFFFFF";
ra = new Number(00);
ga = new Number(00);
ba = new Number(00);
raa = _root.sr;
gaa = _root.sg;
baa = _root.sb;
colorsteps = 20;
colordone = true;
ci = 0;
}
function incR(dr)
{
raa += dr;
if (raa > 255)
{
raa = 255;
}
ra = new Number(Math.floor(raa));
ra = (ra).toString(16);
if (raa < 16)
{
ra = "0" + ra;
}
make();
}
function decR(dr)
{
raa -= dr;
if (raa < 0)
{
raa = 0;
}
ra = new Number(Math.floor(raa));
ra = (ra).toString(16);
if (raa < 16)
{
ra = "0" + ra;
}
make();
}
function incG(dg)
{
gaa += dg;
if (gaa > 255)
{
gaa = 255;
}
ga = new Number(Math.floor(gaa));
ga = (ga).toString(16);
if (gaa < 16)
{
ga = "0" + ga;
}
make();
}
function decG(dg)
{
gaa -= dg;
if (gaa < 0)
{
gaa = 0;
}
ga = new Number(Math.floor(gaa));
ga = (ga).toString(16);
if (gaa < 16)
{
ga = "0" + ga;
}
make();
}
function incB(db)
{
baa += db;
if (baa > 255)
{
baa = 255;
}
ba = new Number(Math.floor(baa));
ba = (ba).toString(16);
if (baa < 16)
{
ba = "0" + ba;
}
make();
}
function decB(db)
{
baa -= db;
if (baa < 0)
{
baa = 0;
}
ba = new Number(Math.floor(baa));
ba = (ba).toString(16);
if (baa < 16)
{
ba = "0" + ba;
}
make();
}
function make()
{
if (ra == "0")
{
ra = ra + "0";
}
if (ba == "0")
{
ba = ba + "0";
}
if (ga == "0")
{
ga = ga + "0";
}
farge = ra add ga add ba;
}
function changecolor()
{
if (ci < colorsteps)
{
if (difr < 0)
{
decR(difr*(-1));
}
else
{
incR(difr);
}
if (difg < 0)
{
decG(difg*(-1));
}
else
{
incG(difg);
}
if (difb < 0)
{
decB(difb*(-1));
}
else
{
incB(difb);
}
ci += 1;
myColor.setRGB(parseInt(farge,16));
}
else
{
colordone = true;
giveRGB(_root.er,_root.eg,_root.eb);
myColor.setRGB(parseInt(farge,16));
}
}
function gotoRGB(er,eg,eb)
{
oldcolorS = (myColor.getRGB()).tostring(16);
while (oldcolorS.length < 6)
{
oldcolorS = "0" + oldcolorS;
}
oldSr = oldcolorS.substr(0,2);
oldSg = oldcolorS.substr(2,2);
oldSb = oldcolorS.substr(4,2);
sr = parseInt(oldSr,16);
sg = parseInt(oldSg,16);
sb = parseInt(oldSb,16);
if (sr <> er or sg <> eg or sb <> eb)
{
_root.sr = sr;
_root.sg = sg;
_root.sb = sb;
_root.er = er;
_root.eg = eg;
_root.eb = eb;
init();
colordone = false;
incR(0);
incG(0);
incB(0);
myColor.setRGB(parseInt(farge,16));
difr = (er - sr)/colorsteps;
difg = (eg - sg)/colorsteps;
difb = (eb - sb)/colorsteps;
}
}
function giveRGB(nr,ng,nb)
{
raa = nr;
gaa = ng;
baa = nb;
incR(0);
incG(0);
incB(0);
}
}
onClipEvent (enterFrame)
{
if (not colordone)
{
changecolor();
}
else
{
}
}
Después se supone que solo debo agregar una orden "on release" al botón que quiero que active el cambio de color.
Cualquier idea me ayudaría mucho, gracias!
Ernesto Bañuelos