Comunidad de diseño web y desarrollo en internet online

MC borroso con Tweener

Citar            
MensajeEscrito el 26 Ago 2009 09:35 am
Hola,

Estoy intentando mover un MC con la clase Tweener. Es para una web y mi diseño tiene toques de PixelArt. El problema es que al moverlo con Tweener (no lo he probado con nada más), al finalizar parece como si no estuviese en las coordenadas exactas.
Es como si al terminar el tween, en vez de estar en x = 1 estuviese en x = 1.3. Sin embargo NO ES ASÍ... Alguien sabe por que sucede?
También hay una cosa curiosa en todo esto, que nada tiene que ver y que me trae de cabeza: el MC contiene un TextField con glow (todo creado desde ActionScript). Si no uso Tweener (es decir si lo añado al escenario, tal cual) el efecto no aparece. Al usar tweener, el efecto sí que aparece... Es algo raro.

Espero que sepáis sacarme la duda de la cabeza. Muchas gracias.
Lîtus.

PS: Todo esta hecho con AS, no hay nada hecho con los menús de Flash.

Por lîtus

8 de clabLevel



 

--> x <--

firefox
Citar            
MensajeEscrito el 26 Ago 2009 01:17 pm
Si te basas en algún tipo de easing siempre tendrás un redondeo (ya que teoricamente puedes dividir un espacio casi infinitamente), si necesitas una ubicación muy precisa, usa el callback del fin del Tween para especificar la posición exacta que deseas

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 27 Ago 2009 08:20 am
Hola,

Lo cierto es que ya usaba el callback "onComplete" de Tweener. Las posiciones finales del MC son las correctas pero no sé porque sucede esta especie de "borrosidad"...

Código ActionScript :

Tweener.addTween(inici, {alpha:1, x:850, z:0, rotationX:0, time:2, transition:"easeOutBack", onComplete:function(){trace(inici.x);}});
// devuelve 850

Código ActionScript :

Tweener.addTween(inici, {alpha:1, x:850, z:0, rotationX:0, time:2, transition:"easeOutBack", onComplete:function(){inici.x=850;}});
// se ve borroso igualmente

Código ActionScript :

Tweener.addTween(inici, {alpha:1, x:850, z:0, rotationX:0, time:2, transition:"easeOutBack", onComplete:function(){inici.x=851;}});
// ídem



Saludos

Por lîtus

8 de clabLevel



 

--> x <--

firefox
Citar            
MensajeEscrito el 27 Ago 2009 08:59 am
Hola,

He seguido haciendo mis pruebas y he visto que sólo me sucede el error si uso las "z" del MC.
Si uso la propiedad z para cualquier cosa (incluso para dejarla igual) se pone borroso. Debe ser alguna opción de AS3 que no controlo... A alguien se le ocurre?

Esto va mal:

Código ActionScript :

/********************* Usando z fuera de Tweener ***************/
var inici:MovieClip = new Inici();
inici.x = 800;
inici.y = 800;
inici.z = 0;
inici.alpha = 0;
Tweener.addTween(inici, {alpha:1, x:850, time:2, transition:"easeOutBack", rounded:true});
/********************* Usando z en Tweener ***************/
var inici:MovieClip = new Inici();
inici.x = 800;
inici.y = 800;
//inici.z = 0;
inici.alpha = 0;
Tweener.addTween(inici, {alpha:1, x:850, z:0, time:2, transition:"easeOutBack", rounded:true});
/********************* Usando z en onComplete de Tweener ***************/
var inici:MovieClip = new Inici();
inici.x = 800;
inici.y = 800;
//inici.z = 0;
inici.alpha = 0;
Tweener.addTween(inici, {alpha:1, x:850, time:2, transition:"easeOutBack", rounded:true, onComplete:function(){inici.z = 0;}});
// En este caso, se ve perfectamente que el error esta en z, ya que
// se ejecuta perfectamente y se ve bien, hasta que llega al final
// Entonces se vuelve borroso...

Esto va bien:

Código ActionScript :

var inici:MovieClip = new Inici();
inici.x = 800;
inici.y = 800;
inici.alpha = 0;
Tweener.addTween(inici, {alpha:1, x:850, time:2, transition:"easeOutBack", rounded:true});


No habría problema si para mi Flash no necesitase usar la z, pero no es el caso. Alguien sabe como evitar que todo se desfoque al usar cualquier propiedad 3D en Flash?

Saludos! (y muchas gracias!!)

Por lîtus

8 de clabLevel



 

--> x <--

firefox
Citar            
MensajeEscrito el 27 Ago 2009 10:46 am
La solución:

Resulta que al usar las propiedades 3D se modifica la matriz 3D del objeto:

Código ActionScript :

obj.transform.matrix3D

Por algun motivo, los valores nunca resultan ser exactos, es decir, si le damos z = 0, en realidad será z = 0.0001. Algo muy cercano pero no exacto. Para evitar eso lo que se puede hacer es lo siguiente:

    1. Antes de modificar la propiedad z, guardamos la matriz matrix3D del objeto.

    2. Después usamos Tweener o lo que sea que modifique las propiedades 3D del objeto (no tiene porque ser un Tween, simplemente poniendo la variable z a un valor concreto, aunque sea 0, ya se modifican)

    3. Una vez modificados, volvemos a restaurar la propiedad tranform.matrix3D. Usando Tweener o algún Tween, puede ponerse en el callback del Tween.

    Código ActionScript :

    Tweener.addTween(obj, { ... , onComplete:function()
          {
             obj.transform.matrix3D = oldMatrix; // en realidad podemos ponerla a null
             obj.x = 850;
             obj.y = 800;
             // ...
             // Modificamos para dejarlo como queremos que esté al finalizar
             // Lo único que no modificaremos serán las propiedades 3D, evidentemente, 
             // ya que estarán en su valor por defecto
          }});


En realidad es una solución muy parecida a la que planteabas Solisarg. Realmente, haciendo pruebas vi que tampoco hay que restablecer la matriz antigua. Dejándola a null, también funciona (la matrix3D sólo tiene valores cuando se modifica alguna de las propiedades 3D, así que de hecho, es lo mismo que dejarlo a null, si no vamos a modificarlos)

Espero que sirva de ayuda a alguien. Y si alguno tenéis una solución mejor, también lo agradeceré.

Saludos!
Lîtus

Por lîtus

8 de clabLevel



 

--> x <--

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.