Comunidad de diseño web y desarrollo en internet online

controlar la finalizacion del tween

Citar            
MensajeEscrito el 03 Oct 2007 07:14 am
hola a tod@s
tengo un problemilla y es que tengo una serie de menus que tienen asociado un evento onRollOver que esta perfecto, pero el problema es que les hago un tween a 2 segundos por ejemplo de rotacion y desplazamiento (al mismo tiempo) y me gustaria que en ese tiempo no fueran susceptibles al rollover porque no esta bien gestionado y no se colocan como debieran despues o se deforman o cosas asi...

ya se que se podria hacer dentro del rollover un if(currentpos==posfinal) { ... } y meter todo el codigo ahi, pero el problema viene cuando tengo muchas posibles posiciones finales... que hago, añado || al if? me resultaria un poco feo y pesado de programar y me preguntaba si habria algun metodo que se lanzara cuando el tween ha terminado para detectarlo desde otros objetos

muchas gracias por adelantado
un saludo

Por maije

Claber

104 de clabLevel



Genero:Masculino  

Valladolid

firefox
Citar            
MensajeEscrito el 03 Oct 2007 08:35 am

Por One

Claber

1488 de clabLevel

5 tutoriales

Genero:Masculino  

Programador Web

firefox
Citar            
MensajeEscrito el 03 Oct 2007 12:07 pm
te aconsejo utilizar el Tweener en vez de la clase de macromedia. Es mas facil de usar

salut

Por Acreonte

Claber

1543 de clabLevel

5 tutoriales
6 articulos

Genero:Masculino  

Digital Scientist

firefox
Citar            
MensajeEscrito el 03 Oct 2007 12:11 pm
perfecto, muchas gracias. era lo que estaba buscando.
me gustaria añadir una nota por si alguie lee este post mas adelante:
si tu tienes muchos elementos que se mueven a la vez y no quieres crearte una variable por cada uno (que ya se que es hacer una chapuza, pero el flash nos permite hacer esto : new Tween(objeto,"propiedad",metodo_easing,ini,fin,duracion,seg/frame);
en lugar de esto: var aux = new Tween(objeto,"propiedad",metodo_easing,ini,fin,duracion,seg/frame); ) como en general, los elementos los moveras por grupos que terminen la animacion en el mismo momento, declara solo una variable por grupo (para hacerte el aux.onMotionFinished = function() { ... } ) y comprueba cuando termine solo esa, asi te ahorraras, de una forma chapucera, repito, muchas lineas de codigo.
aun asi, a esto le veo problemas cuando usas prototipos, que puede enrevesar el codigo mucho

muchas gracias de nuevo one
un saludo a tod@s
jaime

Por maije

Claber

104 de clabLevel



Genero:Masculino  

Valladolid

firefox
Citar            
MensajeEscrito el 03 Oct 2007 02:30 pm
import mx.transitions.Tween;
var func = mx.transitions.easing.Regular.easeIn;
boton.onPress = function() {
var myTw = new Tween(movie, "_x", func, 65, 380, .5, true);
myTw.onMotionFinished = function() {
new Tween(movie, "_x", func, 380, 65, .5, true);
}

}
stop();

Por clipdepelicula

237 de clabLevel



 

Valencia (España)

firefox
Citar            
MensajeEscrito el 03 Oct 2007 04:13 pm
el utlimo ejemplo me vale perfectamente para ilustrar a lo que me referia:
ahora, modificandolo ligeramente, podemos hacer que el usuario no ande tocando las narices dando cien veces click al boton mientras la animacion esta en curso, porque en este caso no nos afectaria, el boton volveria a su posicion inicial y empezaria todas las veces que hiciera falta hasta que el usuario se aburriera aun mas... y dejara correr la animacion, pero en el caso de tener redimensionamientos y rotaciones, que estan mal implementadas a mi parecer en el flash, casca por todos lados. explico un punto que he encontrado que falla:

tenemos un objeto. a ese objeto le metemos un tween de desplazamiento horizontal, otro vertical y uno de rotacion...[[ podreis pensar, vaya caso que pone, pero es muy usual cuando queremos usar un menu en grande que cuando se clickee se reduzca de tamaño y se coloque por ejemplo verticalmente en un lateral para mostrar contenidos y eso no es tan raro...]]
a parte de los tweens tenemos un evento onRollOver dentro de nuestro prototipo de [sub]menu.
si pasamos el puntero del raton por encima del objeto mientras esta con el tween en accion, este objeto se comportara de forma rara y no controlable dando unos resultados no deseados de redimensionamiento o rotacion. solucion mas logica, desactivar ese objeto hasta que el tween haya terminado y asi no salte el onRollOver. entonces, modificando un poco el codigo de aqui arriba, tendriamos como hacerlo mas o menos:

Código :

import mx.transitions.Tween;
var func = mx.transitions.easing.Regular.easeIn;

boton.onPress = function() {
   boton.enabled= false;
   myTw = new Tween(movie, "_x", func, 65, 380, .5, true);
   myTw.onMotionFinished = function() {
      var aux = new Tween(movie, "_x", func, 380, 65, .5, true);
      aux.onMotionFinished = function() {
         boton.enabled= true;
      }
   }
}


** si algun principiante lee este post, que sepa que para que esto funcione debe de haber creado en el lienzo de aplicacion (pantalla principal) los objetos "boton" y "movie" ya sea como buttons o como movieClips, funcionara de las dos formas. **

muchisimas gracias a tod@s y ahora deseadme suerte, porque tengo un arbol de mas de 30 menus-submenus con 3 tweens para cada uno de sus movimientos...asi que me espera un buen curro coñazo que ni siquiera se si voy a hacer y sencillamente memorizare lo aprendido para hacerlo la proxima vez desde un principio.

un saludo
atentamente
maije

Por maije

Claber

104 de clabLevel



Genero:Masculino  

Valladolid

firefox

 

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