Puedo identificar dos problemas. El primero se relaciona con el movimiento suave y el segundo se relaciona con la aparición de caracteres en la pantalla.
Para crear un movimiento suave, puede usar una técnica llamada Interpolación lineal o (LERP) para suavizar el movimiento. Básicamente, cómo funciona es entre su punto de partida y su punto final, usted calcula un conjunto de distancias cada vez más pequeñas para emular un movimiento suave y reducir la velocidad a medida que se acerca el punto final.
El ejemplo más simple de esta función sería:
//point1 is the current position, will be starting position on first call
//point2 is the target position
//epsilon is the % of the distance between current and target you want
//to cover per game physics loop (a fixed realworld time based loop).
//The smaller the % the "smoother" the motion.
float lerp(float point1, float point2, float epsilon)
{
return point1 + epsilon * (point2 - point1);
}
A medida que el personaje se acerca al punto 2, irá disminuyendo gradualmente. Tenga en cuenta que en realidad nunca tocarán el punto 2, sino que se acercarán infinitamente. Debería corregir esto y si el jugador está a menos de una distancia infinitamente pequeña del punto 2, podemos considerar que el jugador está en el punto 2.
El segundo problema que mencionaste está relacionado con tu personaje volando fuera de la pantalla. Este es el resultado de la entrada que se lee cada actualización del bucle del juego combinada con el movimiento instantáneo entre los mosaicos.
Idealmente para resolver esto, en su código debe decidir
- Cuánto tiempo real le tomaría al personaje moverse del punto 1 al punto 2.
- Configure su Lerp para que se ejecute entre los puntos 1 y dos durante esta duración
- Lea la entrada nuevamente una vez que se haya alcanzado el punto 2 para decidir a dónde ir