Hola a todos.

Estaba buscando ideas para programar un movimiento suave en 2D, para un shooter cenital. El personaje alcanza grandes velocidades y, para tener un buen control, es necesario un cambio gradual de velocidad, también se pretende simular al personaje derrapando porque no puede detenerse al instante. El programa también podría simular el desplazamiento sobre hielo.

Lo que se hace comúnmente para programar ese comportamiento es dar un valor a la variable friction y después sumar una velocidad para modificar las variables speed y direction. El valor de speed se incrementa en cantidades mayores a friction para poder contrarrestar la fricción, hasta alcanzar una velocidad máxima. Lo que no me agrada de este algoritmo es que el tiempo necesario para alcanzar la velocidad máxima es mayor al tiempo necesario para detenerse por completo, busco un algoritmo que permita acelerar y frenar en tiempos iguales. Además la dirección que se indica con los controles nunca se alcanza, a menos que se inicie el movimiento desde el reposo, la dirección se aproxima mucho, pero no es exacta.

Tengo un algoritmo que ha ido evolucionando conforme lo usaba en diferentes juegos, primero en un FPS, después en un plataformero 3D, y ahora en un shooter cenital. He logrado hacer que el tiempo para acelerar sea igual al tiempo para frenar, y es posible frenar más rápido si se mueve el joystick en la dirección contraria al movimiento. Pero no me gusta demasiado, creo que aún puede mejorar. En este sistema, la velocidad se obtiene como una suma vectorial de dos componentes que he llamado "empuje" e "inercia".

Espero que puedan ayudarme. Más tarde explicaré mi algoritmo.


Gracias Ynfiniti, creo no voy a poder usar los scripts directamente, hay que hacer muchas modificaciones, sin embargo, me dieron la idea de representar el movimiento como un sistema con amortiguamiento.