Foros del Web » Creando para Internet » Flash y Actionscript »

easing de color

Estas en el tema de easing de color en el foro de Flash y Actionscript en Foros del Web. Hi, tengo un pequeño problema haciendo un easing de color Bajé un ejemplo del blog de kadazuro pero la verdad es muy avanzado ese codigo ...
  #1 (permalink)  
Antiguo 22/03/2005, 16:11
Avatar de nodream  
Fecha de Ingreso: septiembre-2003
Mensajes: 134
Antigüedad: 14 años, 2 meses
Puntos: 2
easing de color

Hi, tengo un pequeño problema haciendo un easing de color

Bajé un ejemplo del blog de kadazuro pero la verdad es muy avanzado ese codigo para mí así que intenté hacer otro, y mas o menos me sale pero no del todo, voy calculando los valores RGB y se los voy poniendo con setTransform.

hice esta funcion

Código:
MovieClip.prototype.setColor = function(cambiar:Boolean,R:Number,G:Number,B:Number)
{
  this.onEnterFrame = function()
  {
    if(cambiar)
   {
    myCol = new Color(this);
    velocidad=5; //por ejemplo. A mayor valor menor velocidad.;
      var allColors:Object = myCol.getTransform();
   
     allColors.rb += (R-allColors.rb)/velocidad;
    allColors.gb += (G-allColors.gb)/velocidad;
    allColors.bb += (B-allColors.bb)/velocidad;

 
    myCol.setTransform(allColors);

    if(allColors.rb==R && allColors.gb==G && allColors.bb==B)
     {cambiar=false;}
   }
  };
};
donde los valores que se pasan en la funcion R,G,B son los valores a los que quermos llegar.

hago el esaing mediante la siguiente formula, la cual se aplica para los tres colores (Red,Gren,Blue).

Valoractual += (ValorFinal - ValorActual)/velocidad;

esta formula la he utilizado antes para easings de movimiento, pero para el color no funciona bien, llega un punto donde el valor deja de incrementarse o decrementarse y nunca alcanza el ValorFinal. Por ejemplo si el valor al que quiero llegar es 255 el valoractual llega a un valor cercano, pero nunca a 255.

¿hay algo malo en mi formula del easyng? ¿Existe alguna otra?

Gracias a todos los que me puedan ayudar
  #2 (permalink)  
Antiguo 22/03/2005, 16:51
Avatar de pulento  
Fecha de Ingreso: noviembre-2002
Ubicación: En un pequeño, helado, obscuro reino... llamado Dinamarca.
Mensajes: 1.852
Antigüedad: 15 años, 1 mes
Puntos: 1
Probe tu code y esta bien interesante.. lo de la diferencia es un margen de 2 a 7 ke se presenta cuando la velocidad es mayor ke 2.
Creo ke el calculo se podria redondear dandole la diferencia al total final.. se ke no es lo mas apropiado pero no se me ocurre otra solucion por ahora.

Otra cosa .. si el valor ke le mandaz a tu fucnion es lamisma repetida tre veces.. deberias hacer ke todo lo calculeen una sola linea y no tre veces.
Ademas los if no son necesario ya ke cuando llega al valor pedido automatoicamente de detiene.

Por ejemplo algo asi--->
Código PHP:
MovieClip.prototype.setColor = function(R:Number){
  
this.onEnterFrame = function(){
     
myCol = new Color(this);
     
velocidad=5//por ejemplo. A mayor valor menor velocidad.;
     
var allColors:Object myCol.getTransform();
     
_root.valorTXT.text allColors.rb allColors.gb allColors.bb += (allColors.bb)/velocidad;
     
myCol.setTransform(allColors);
   };
}; 

Salu2
__________________
http://www.flotdesign.dk/
  #3 (permalink)  
Antiguo 23/03/2005, 08:15
Avatar de nodream  
Fecha de Ingreso: septiembre-2003
Mensajes: 134
Antigüedad: 14 años, 2 meses
Puntos: 2
He resuelto el probelma

Resolví el problema, el problema era en el getTransform, ya que este siempre devolviá valores enteros entonces, nunca me contaba los decimales, lo que hice fue pedirlos solo una vez y almacenarlos en otras tres variables, es un poco mas de codigo, pero ni modo que por tres variable se vaya a acabar la memoria, corregí lo del if, y lo de los tres colores que mencionas es necesario, tiene que hacerce por separado, ya que no siempre son iguales los valores a los que tienen que llegar la funcion prototipo quedo así, libre para todo aquel que quiera usarla, creo que esta menos complicada que la de kadazuro, al menos para usuarios novatos como yo.

Código:
MovieClip.prototype.setColor = function(R:Number,G:Number,B:Number)
{
  
  myCol = new Color(this);
  allColors = new Object();
  allColors = myCol.getTransform();
  red = allColors.rb;
  green = allColors.gb;
  blue = allColors.bb;
  
  this.onEnterFrame = function()
  {
 	 velocidad=6; //por ejemplo. A mayor valor menor velocidad.;
  	 red+=(R-red)/velocidad;
 	 green+=(G-green)/velocidad;
 	 blue+=(B-blue)/velocidad;
	 
	 var myObj:Object = { ra: 0, rb: red, ga: 0, gb: green, ba: 0, bb: blue, aa: 100, ab: 0};
	 
	 myCol.setTransform(myObj);
	 if(myObj.rb==R && myObj.gb==G && myObj.bb==B)
	  {delete this.onEnterFrame;}
	
  };
};
para usarilo solo se manda llamar con:

mi_mc.setColor(255,12,200);

este code no es perfecto, tiene un pequeño detalle; hay que inicializar las propiedades ADVANCED de los colores del movieclip primero, esto puede hacerce con otra linea supongo aunque yo lo hago desde tiempo de diseño y me evito problemas.

Última edición por nodream; 23/03/2005 a las 08:17
  #4 (permalink)  
Antiguo 23/03/2005, 09:20
Avatar de nodream  
Fecha de Ingreso: septiembre-2003
Mensajes: 134
Antigüedad: 14 años, 2 meses
Puntos: 2
He notado un error en el codigo, la nueva version es

Código:
MovieClip.prototype.setColor = function(cambiar:Boolean,R:Number,G:Number,B:Number)
{
  
  myCol = new Color(this);
  allColors = new Object();
  allColors = myCol.getTransform();
  red = allColors.rb;
  green = allColors.gb;
  blue = allColors.bb;
  
  this.onEnterFrame = function()
  {
	 velocidad=5; //por ejemplo. A mayor valor menor velocidad.;
  	 red+=(R-red)/velocidad;
 	 green+=(G-green)/velocidad;
 	 blue+=(B-blue)/velocidad;

	 var myObj:Object = { ra: 0, rb: red, ga: 0, gb: green, ba: 0, bb: blue, aa: 100, ab: 0};
	 
	 myCol.setTransform(myObj);

	 if(Math.round(red)==R && Math.round(green)==G && Math.round(blue)==B)
	  {delete this.onEnterFrame;}
	
  };
};

Última edición por nodream; 23/03/2005 a las 09:23
  #5 (permalink)  
Antiguo 27/04/2005, 03:56
 
Fecha de Ingreso: mayo-2003
Mensajes: 866
Antigüedad: 14 años, 7 meses
Puntos: 0
Donde pones:
blue+=(B-blue)/velocidad;

Si pongo:
trace(blue);

Me sale esto: NaN

Solamente ocurre en esa parte del codigo, a que puede ser debido.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:44.