Comunidad de diseño web y desarrollo en internet online

Interpolación de movimiento suavizada condicionada

Citar            
MensajeEscrito el 11 Mar 2008 03:23 pm
Muy buenas,

Trabajando en Flash Lite 2.x,
Cuando se pulsa una tecla determinada, dirección hacia la izquierda del joystick, por ejemplo, se produce una interpolación de movimiento suavizada con easeInOut de un mc hacia la izquierda. Hasta ahí todo perfecto.

Mi problema está en que cuando mantengo pulsado esa tecla, se producen movimientos sucesivos en dicha dirección, pero de una manera intercalada, 'a saltos', dado que están los easeInOut.

Mi proposición es la siguiente, me gustaría saber como hacer en ActionScript que cuando MANTENGAS una tecla pulsada (en este caso la de dirección izquierda, aunque me da igual), se produzca la interpolación de movimiento de manera suavizada con el easeIn cuando se inicia la presión de la tecla y el easeOut cuando se termine la pulsación de la tecla, sin 'saltos' de movimientos. Por tanto se movería el mc la distancia (píxeles) proporcional al tiempo que se ha pulsado dicha tecla.

No sé si me habéis entendido bien. Si no lo entendéis intento especificar mejor.

Espero proposiciones y ayuda.

Gracias.

Por protantric

33 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 11 Mar 2008 04:31 pm
la funcion easeOut tiene sino mal recuerdo unos rangos de inicio y final lo que podrias hacer es:


por ejemplo un movimiento de una pelota que empiece en x=0 y termine en x=10; //aqui para cuando aprietes la tecla

entonces la pelota se movera 1 , 2 , 3, 4, 5.. si en el 5 subiste la tecla entonces lo que debes hacer es decirle a la funcion
easeOut que tome como valor inicial 5 que en actionscript seria "PelotaPosX._x" (la posicion actual donde esta tu pelota) y el final de la animacoin sea x=0;

Por DiegoAzul

376 de clabLevel



 

Mx

firefox
Citar            
MensajeEscrito el 11 Mar 2008 05:18 pm
Pega esto en el primer frame. Necesitas que la pelota (la instancia) se llame "bola".

Código :

ac = 0;
vel = 0;
mueve = 0;
bola.onEnterFrame = function() {
   if (Key.isDown(Key.LEFT)) {
      _root.ac -= 1;
      _root.vel += _root.ac;
   } else {
      if(_root.vel<0){
         _root.ac += 1;
         _root.vel += _root.ac;
      }
      if (_root.vel>0) {
         _root.vel = 0;
         _root.ac=0
      }
   }
   this._x += _root.vel;
};

Por mcapu

181 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 12 Mar 2008 09:26 am
Muchas gracias, voy a probarlo.

Por protantric

33 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 12 Mar 2008 09:30 am
¿Y para que no aumente la velocidad?, es decir, ¿para que mientras se ejecute el isDown(Key.LEFT) la velocidad sea constante?

Por protantric

33 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 12 Mar 2008 09:35 am

protantric escribió:

¿Y para que no aumente la velocidad?, es decir, ¿para que mientras se ejecute el isDown(Key.LEFT) la velocidad sea constante?


Es que me cuesta entender el funcionamiento de _root. Y por eso no puedo resolverlo por mí mismo.

Gracias ^^

Por protantric

33 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 12 Mar 2008 09:46 am
Ya que me gustaría que fuera un movimiento como cuando estás en la aplicación Google Earth y mueves el mapa o la bola del mundo con las flechas, el movimiento es constante y suavizado mientras tengas pulsada la tecla. Pero se desacelera y acelera cuando no pulsas y pulsas la tecla respectivamente.

Gracias

Por protantric

33 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 12 Mar 2008 10:58 am
No logro entender el código :S

Por protantric

33 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 12 Mar 2008 01:48 pm

Código :

ac = 0;
vel = 0;
mueve = 0;
bola.onEnterFrame = function() {
   if (Key.isDown(Key.LEFT)) {
      _root.ac -= 1;
      _root.vel += _root.ac;
   } else {
      if(_root.vel<0){
         _root.ac += 1;
         _root.vel += _root.ac;
         if(_root.vel>5){
           _root.vel=5
         }
      }
      if (_root.vel>0) {
         _root.vel = 0;
         _root.ac=0
      }
   }
   this._x += _root.vel;
};


El código es el de un movimiento acelerado (que no MUA -movimiento uniformemente acelerado)

Por mcapu

181 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 12 Mar 2008 03:06 pm
Pero un MUA tampoco es lo que quiero. Ya que aceleraría de forma uniforme, pero no terminaría de acelerar.

Me gustaría que acelerara hasta cierta velocidad, luego fuese a velocidad constante, y cuando dejaras de pulsar desacelerara.

Gracias.

Por protantric

33 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 12 Mar 2008 03:19 pm
Además, cuando pruebo ese código incluyéndole que no se salga de pantalla para ver qué hace el mc. Corre hacia la izquierda excesivamente rápido y de vez en cuando vuelve hacia la derecha. E incluso cuando dejo el botón pulsado mucho tiempo se me queda parado.

Simplemente me gustaría saber o entender del código para poder modificarlo a mi gusto, ya que veo que los efectos de aceleración y desaceleración se producen, pero no se controla del todo como me gustaría.

Saludos.

Por protantric

33 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 12 Mar 2008 07:00 pm
Lo que hace es:
Mira si hay una tecla pulsada (LEFT).
Si está pulsada, aumenta la aceleración, se la suma a la velocidad y mueve el objeto.
Si no, disminuye la aceleración, se la suma a la velocidad y mueve el objeto.

Por mcapu

181 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 13 Mar 2008 10:02 am
Vale, ok, gracias.

Ya te diré.

Por protantric

33 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 13 Mar 2008 02:35 pm
//
yo recomiendo el uso de la clase Tween
//

Por penHolder

Claber

4661 de clabLevel

39 tutoriales
2 articulos

Genero:Masculino   Premio_Secretos

| mdz |

firefox
Citar            
MensajeEscrito el 13 Mar 2008 04:54 pm
Aquí es más difícil usar la clase Tween que hacer un easing simple, penHolder

Por mcapu

181 de clabLevel



Genero:Masculino  

firefox

 

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