4 de mayo de 2008

Random Color Animation con AS2

Hola quetal, bueno estaba buscando como hacer una transicion de colores con AS y lo que encontre fue el siguiente ejmplo en kirupa , pero es para flash 5 y personalmente no me gusta como organiza su codigo dentro de los clips de pelicula. A todo esto hice algo parecido con AS2, el efecto logrado es practicamente el mismo solo que usando clases de AS2 , para que lo vean es asi como queda...






Bueno el codigo para el funcionamiento de la animacion es el siguiente:



import flash.geom.ColorTransform;
import flash.geom.Transform;
import mx.transitions.*;

class ColorAnim extends MovieClip{

private var micolor:ColorTransform;
private var cambiarColor:Transform;
private var Rcolor:Tween;
private var Gcolor:Tween;
private var Bcolor:Tween;
private var segundos:Number=3;
private var tono:Number=4;

var cantidadRojo:Number;
var cantidadAzul:Number;
var cantidadVerde:Number;

public function ColorAnim(){
micolor = new ColorTransform();
cambiarColor=new Transform(this);
getColores();
Rcolor=new Tween(micolor,"redOffset",null,micolor.redOffset,cantidadRojo,segundos,true);
Gcolor=new Tween(micolor,"blueOffset",null,micolor.blueOffset,cantidadAzul,segundos,true);
Bcolor=new Tween(micolor,"greenOffset",null,micolor.greenOffset,cantidadVerde,segundos,true);
animar();
}

private function getColores():Void{
switch (tono){
case 1: // tonos claros
cantidadRojo=claros();
cantidadAzul=claros();
cantidadVerde=claros();
break;
case 2: // tonos medios
cantidadRojo=medios();
cantidadAzul=medios();
cantidadVerde=medios();
break;
case 3: // tonos oscuros
cantidadRojo=oscuros();
cantidadAzul=oscuros();
cantidadVerde=oscuros();
break;
case 4: // prevalece el rojo
cantidadRojo=claros();
cantidadAzul=oscuros();
cantidadVerde=oscuros();
break;
case 5: // prevalece el verde
cantidadRojo=oscuros();
cantidadAzul=oscuros();
cantidadVerde=claros();
break;
case 6: // prevalece el azul
//trace("azul");
cantidadRojo=oscuros();
cantidadAzul=claros();
cantidadVerde=oscuros();
break;
}
}

private function oscuros():Number{
return randRange(0,85);
}
private function medios():Number{
return randRange(85,170);
}
private function claros():Number{
return randRange(170,255);
}
private function randRange(min:Number, max:Number):Number {
var randomNum:Number = Math.floor(Math.random() * (max - min + 1)) + min;
return randomNum;
}
public function animar():Void{
var clase:ColorAnim=this;
Rcolor.onMotionChanged=function() {
clase.interpolar(clase);
}
Rcolor.onMotionFinished=function () {
clase.ciclico(clase);
}
}
private function interpolar(claseBase:ColorAnim){
//trace("red="+claseBase.micolor.redOffset+" green="+claseBase.micolor.greenOffset+" blue="+claseBase.micolor.blueOffset);
claseBase.micolor.redOffset=Math.round(claseBase.micolor.redOffset);
claseBase.micolor.blueOffset=Math.round(claseBase.micolor.blueOffset);
claseBase.micolor.greenOffset=Math.round(claseBase.micolor.greenOffset);
//trace("red="+claseBase.micolor.redOffset+" green="+claseBase.micolor.greenOffset+" blue="+claseBase.micolor.blueOffset);
claseBase.cambiarColor.colorTransform = claseBase.micolor;

}
private function ciclico(claseBase:ColorAnim){
// trace(claseBase.Rcolor+" "+claseBase.Gcolor);
//trace("fin:"+claseBase.micolor);
getColores();
//trace("r="+cantidadRojo+" v="+cantidadVerde+" b="+cantidadAzul);
claseBase.Rcolor.continueTo(cantidadRojo,claseBase.segundos);
claseBase.Gcolor.continueTo(cantidadVerde,claseBase.segundos);
claseBase.Bcolor.continueTo(cantidadAzul,claseBase.segundos);
}

function set intervalo(t:Number):Void{
segundos=t;
}
function get intervalo():Number{
return segundos;
}

}


Para hacer esto cree un clip de pelicula y lo "linkee" (enlace) a la clase "ColorAnim" y listo..
bueno explicar el codigo ahorita me da fiaca, pero con gusto si tienen preguntas les respondo.
Y espero que este ejemplo le sirva a alguien o le oriente para lo que este haciendo, aqui pueden descargar el fla.

No hay comentarios:

Publicar un comentario