Moviendo personajes
Uno piensa que el simple hecho de mover un personaje en el nivel es tan facil como actualizar sus coordenadas. Nada mas lejos de la realidad.
Cada vez que muevo un personaje tengo que volver a recolocarlo en el nivel pero intentando hacerlo de forma optima, no es cuestion de consumir ciclos de CPU cuando no hace falta.
Ademas el simple hecho de moverlo teniendo integrado un motor de fisicas es una odisea en si. Por ejemplo en Newton, que es el que estamos usando, algunas de las cosas que hay que controlar son:
* Asegurarme que no haya friccion entre el nivel y el personaje.
* Controlar en cada momento si el personaje esta pisando el suelo lanzando un rayo hacia los pies y calculando la distancia con el suelo.
* Si quiero moverlo hacia adelante tengo que obtener la matriz de posicion y rotacion del personaje, eliminarle el vector de posicion, multiplicarla por el vector de direccion en la que deseo moverlo y finalmente añadirle el vector resultante como una fuerza en el cuerpo que representa el personaje.
* Hay que intentar no pasarse al mover el personaje porque movimientos demasiado rapidos hacen que literalmente atraviese la pared sin inmutarse.
Adios a los viejos buenos tiempos de 'personaje.x = personaje.x + 10 * reloj'. Con lo bien que me lo pasaba yo moviendo la paleta para arriba y para abajo en el Pong.
Cada vez que muevo un personaje tengo que volver a recolocarlo en el nivel pero intentando hacerlo de forma optima, no es cuestion de consumir ciclos de CPU cuando no hace falta.
Ademas el simple hecho de moverlo teniendo integrado un motor de fisicas es una odisea en si. Por ejemplo en Newton, que es el que estamos usando, algunas de las cosas que hay que controlar son:
* Asegurarme que no haya friccion entre el nivel y el personaje.
* Controlar en cada momento si el personaje esta pisando el suelo lanzando un rayo hacia los pies y calculando la distancia con el suelo.
* Si quiero moverlo hacia adelante tengo que obtener la matriz de posicion y rotacion del personaje, eliminarle el vector de posicion, multiplicarla por el vector de direccion en la que deseo moverlo y finalmente añadirle el vector resultante como una fuerza en el cuerpo que representa el personaje.
* Hay que intentar no pasarse al mover el personaje porque movimientos demasiado rapidos hacen que literalmente atraviese la pared sin inmutarse.
Adios a los viejos buenos tiempos de 'personaje.x = personaje.x + 10 * reloj'. Con lo bien que me lo pasaba yo moviendo la paleta para arriba y para abajo en el Pong.