¿Cómo podemos hacer que nuestro personaje se mueva suavemente a través de las fichas? Se mueve azulejo por azulejo, pero eso no parece profesional. Además, cuando mantiene presionadas las teclas de flecha, se desliza por la pantalla. ¿Cómo podemos evitar que eso suceda?
8
Respuestas:
El movimiento suave se puede lograr de varias maneras. Y realmente depende de qué tipo de movimiento quieras permitir.
Pseudocódigo:
Donde
MoveTowards
solo toma la posición actual y agrega una parte de la distancia entre esta y la posición objetivo.Mantener presionadas las teclas de flecha para mover personajes también se puede implementar de diferentes maneras. Probablemente lo que estás haciendo es algo como:
De hecho, esto haría que el personaje se deslice por la pantalla. Ya que estarías actualizando la posición muchas veces por segundo. Una forma un poco mejor de implementar esto sería agregar un retraso. Algo como
Esto agregará un temporizador de retraso y solo actualizará la posición del mosaico cuando
movementDelay
se haya alcanzado el valor.fuente
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:
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
fuente