Movimiento de un objeto
actionScript básico, Flash tools, Prototypes | Enero 20th, 2004Versión para imprimir
En flash no, optimizar, optimizar y optimizar, esta debe ser tu meta. No basta con que funcione, hay que buscar el mejor método.
Un ejemplo sencillo
Quiero hacer una animación que mueva un clip de pelí cula a lo ancho del escenario, para ello sé que tendré que modificar la propiedad _x del objeto movieClip, puedo conseguirlo valiendome de distintas técnicas, pero todas tienen algo en común , una repetición controlada de acciones que se denomina bucle (loop en inglés).
Flash se caracteriza por facilitar el que cualquier persona con muy pocos conocimientos, pueda ver algo más que texto estático en su pantalla, seguramente alguien que empieza solucionarí a el problema con una interpolación de movimiento, funcionarí a, pero desde luego no es la mejor forma de conseguir el efecto, veamos tres posibilidades
1. Al estilo flash 5 (timeline loop)
// – fotograma clave 1 : mc_miclip._x += 1 // – fotograma clave 2 : if (mc_miclip._x>=550) { stop(); } else { gotoAndPlay(1); }
2. Al estilo MX usando el evento de clip de pelí cula onEnterFrame (timeline loop)
this.onEnterFrame = function() { with (mc_miclip) { _x += 10; if (_x>=550) { delete this.onEnterFrame; } } };
La acción de mover el clip de pelí cula se ejecuta cada vez que la cabeza lectora pasa por el fotograma, para un mejor resultado deberias aumentar la velocidad de reproducción de tu pelí cula a 24 fps (fotogramas por segundo)
3. Otra alternativa, la accion setInterval
mover = function (argumento) { if (argumento._x >= 550) { clearInterval(idIntervalo); return; } argumento._x += 1; updateAfterEvent(); }; idIntervalo=setInterval(mover, 1, mc_miclip);
Esta última es para mi la mejor opción, ya que la acción de mover el clip de pelí cula se realiza independientemente del número de fotogramas que tenga la lí nea de tiempo.
Copia cada ejemplo y prueba la pelí cula (Ctrl+Intro) verás como va mejorando el efecto.
Enero 20th, 2004 at 4:36 pm
Muy bueno Toni, realmente es una manera muy ventajosa de hacerlo con el setInterval, ya que te olvidas de los dichosos fps de la peli. Me ha gustado tb eso de “optimizar, optimizar y optimizar, esta debe ser tu meta", me lo voy a tatuar en el brazo XD
Otra aproximación seria parametrizando el tiempo (ya lo sé, estoy mu pesao con eso…)
[codigo]
MovieClip.prototype.mover = function(t){
this.f = function(){
if (this._x >= 550) {
clearInterval(this.idIntervalo);
return;
}
this._x += 1;
updateAfterEvent();
}
this.idIntervalo = setInterval(this,"f",t);
}
// uso
miClip_mc.mover(100);
[/codigo]
p.d.: no lo he probado, en cuanto llegue a casa lo haré, si ves que no rula y quieres borrar el post quizás mejor.
Un saludo.
Enero 20th, 2004 at 6:08 pm
Hey Dani,te juro que mientras anoche escribia este tuto, pensé: Dani me dirá lo de parametrizar el tiempo, je,je
pasa que es un tuto de nivel básico, con la salvedad quizá del último ejemplo, que no es tan aprovechado como deberí a.
Tu tranki, que tus ideas son bienvenidas siempre.
saludos.toni
Ah! y claro que rula
Febrero 2nd, 2004 at 7:52 pm
Estoy empezando con AS. Hasta ahora lo mio eran las interpolaciones, ya que soy más bien diseñador que programador. Me han resultado de gran ayuda tus ejemplos. Gracias y adelante.
Febrero 3rd, 2004 at 10:04 am
Empezar y cogerle el gustillo es todo una
Saludos!
Febrero 13th, 2004 at 2:10 pm
Buenas… solo una pregunta. Yo uso normalmente el 3r caso (setInterval) pero se activa cuando hay un evento rollOver. Lo que no entiendo és que en vuestro ejemplo la pelota se acelera… os envio el ejemplo:
mc_miclip.onRollOver = function () {
idIntervalo=setInterval(mover, 1, mc_miclip);
}
mover = function (argumento) {
if (argumento._x >= 200) {
clearInterval(idIntervalo);
argumento._x=0
return;
}
argumento._x += 1;
updateAfterEvent();
};
Joan
Febrero 14th, 2005 at 11:18 pm
les agradeceria si me pudieran decir como hacer para que mientras el mouse este sobre un movieclip otro movieclip se mueva me ha funcionado haciendo onmousedown pero no encuentro la sentencia para cuando el mouse este sobre el movieclip como se hace podrian colaborarme? gracias
Febrero 14th, 2005 at 11:26 pm
ahh y que mientras el mouse este sobre el clip el otro objeto siga en movimiento sobre el eje x hasta que el mouse ya no este sobre el movieclip, lo que pasa es que soy principiante con el actionscript y no he podido resolverlo muchas gracias
Febrero 15th, 2005 at 12:21 am
Hola coyr,
para detectar el cursor haciendo hit en el movieClip, utiliza hitTest, por ejemplo:
this.onEnterFrame = function () {
if (clip1_mc.hitTest (_xmouse, _ymouse)) {
clip2_mc._x+=1
}
};
Junio 18th, 2005 at 7:21 pm
Hola, nesecito ayuda para mover un “Clip de Pelicula” para la Derecha cuando pongo el mause sobre un “Boton” o “Clip de Pelicula” y para la Izquierda cuando coloco el mouse sobre otro “Boton” o “Clip de Pelicula", estos ejemplos anteriores me ayudaron muchisimo pero cuando creo dos “Clip de Pelicula” para mover un tercero solo funciona uno, no se por que.
Desde ya muchas gracias, chauuuuu
Octubre 25th, 2005 at 5:56 pm
Hola, me ha sido de gran ayuda el ejemplo, pero tengo una duda, el ejemplo lo he insertado en un boton con rollOver, ¿como serÃa el código haciendo rollOut en el mismo botón y que vuelva el clip a su primer estado???
un saludo