Movimiento con velocidades y direcciones

Buenas, me preguntaba si es posible elaborar una función en LuaDev que haga que algun objeto en pantalla se mueva en una dirección x a una velocidad y, no importa si el ángulo es en grados o radianes pues exiten funciones para realizar conversiones entre ellos, gracias de antemano


 

 

                           Falconal was here


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de Chimecho

Bien pues

Primero que nada, como mencionas el ángulo con el que se debe mover, te recomiendo leer este comentario, y el resto del hilo también si te apetece, pero lo principal es ese comentario.

Luego, tendrás dos puntos, uno de partida y otro de llegada que estará sobre la circunferencia imaginaria. Entonces, para lograr el movimiento debes tener:

  • Punto de partida en X
  • Distancia del punto de partida al punto de llegada en X (punto sobre la circunferencia en X - punto de partida en X)
  • Punto de partida en Y
  • Distancia del punto de partida al punto de llegada en Y (punto sobre la circunferencia en Y - punto de partida en Y)
  • Cuánto aumentará en X por cada cuadro que se dibuje en pantalla (distancia en X/número)
  • Cuánto aumentará en Y por cada cuadro que se dibuje en pantalla (distancia en Y/número)

Los dos números para los que se divide en la cantidad de aumento, los calculas según cuántos cuadros quieres que dure la animación de movimiento.

Una vez que tengas todo eso, necesitarás un código Lua que siga este algoritmo (o parecido):

x = 240 -- punto de partida en x
y = 136 -- punto de partida en y
 
angulo = 30 -- vamos a suponer que se mueve a 30º
dx = cos(30) * 20 -- coseno de 30 * 20 (20 será la distancia total entre el punto de partida y el de llegada)
dy = sin(30) * -20 -- seno de 30 * -20 (la psp tiene -Y arriba y +Y abajo, mira en el comment que te puse)
 
aumentox = (dx - x)/10 -- (distancia en X)/10 cuadros
aumentoy = (dy - y)/10 -- (distancia en Y)/10 cuadros
 
-- Ahora, suponiendo que lo que deseas es mover algo de un punto a otro y que se quede en el punto de llegada, deberás meter lo que sigue en un bucle:
si x es distinto de dx, entonces
    sumar aumentox a x
fin si
 
si y es distinto de dy, entonces
    sumar aumentoy a y
fin si
 
mostrar tu objeto en las coordenadas x,y

Con este código cuando hayan pasado exactamente 10 cuadros, tu imagen, texto, o lo que sea, estará justo en el punto de llegada. Ahora, si lo que deseas es que se mueva indefinidamente siguiendo la misma dirección hasta chocar con algo o algo así, basta con cambiar las condiciones por las que prefieras

 

Saludos!



PSP FAT [5.00 M33-6] [6.60 ME] [Hard Moded] / Nintendo Wii [4.1U] [cIOS Hermes] [D2X cIOS] / iPhone 3G [4.2.1] [BB 05.13.04] [redsn0w] / iPod Touch 4 [6.1] [evasi0n]

07/05/10: Tuve el placer de llamarle con todo derecho "N00B" a molotovi xDDD

Recuerda: Sé el intérprete -_-

Imagen de NEKERAFA

Mmm...

Trigonometía pura y dura... nose como no conocí a esta amiga mucho antes XD

Imagen de Mills

Uff

Yo tuve que recordar lo de los senos y cosenos también.. Luego puedes hasta añadir rozamiento, restando ciertos porcentajes a la velocidad en cada ciclo.

Separas la velocidad en componente "x" e "y" (o en tres ejes si lo haces en 3D) y disminuyes la velocidad dividiendola por un número. No uses restas porque va a moverse un poco raro jeje.

Saludos


Pobre PSP

Conversiones entre grados y

Conversiones entre grados y radianes? Si, en el módulo math:
math.rad  -->convierte a radianes
math.deg -->convierte a grados

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.