Recientemente me metí en XNA y debo decir que me encanta. Como una especie de juego hello world, decidí crear el clásico juego "Snake". La versión de 90 grados fue muy simple y fácil de implementar. Pero cuando trato de hacer una versión que permita una rotación de 360 grados con las flechas izquierda y derecha, me encuentro con un problema.
Lo que estoy haciendo ahora proviene de la versión de 90 grados: iterando a través de cada parte del cuerpo de la serpiente comenzando en la cola y terminando justo antes de la cabeza. Esto funciona muy bien cuando se mueve cada 100 milisegundos. El problema con esto es que crea un estilo de juego entrecortado ya que técnicamente el juego progresa a solo 6 fps en lugar de su potencial 60.
Me gustaría mover la serpiente en cada ciclo de juego. Pero desafortunadamente, debido a que la serpiente se mueve a la velocidad del tamaño de su cabeza, va demasiado rápido. Esto significaría que la cabeza necesitaría moverse a un incremento mucho menor, como (2, 2) en su dirección en lugar de lo que tengo ahora (32, 32). Debido a que he estado trabajando en este juego de vez en cuando durante un par de semanas mientras administraba la escuela, creo que he estado pensando demasiado en cómo lograrlo. Probablemente sea una solución simple, simplemente no la estoy captando.
Aquí hay un pseudocódigo para lo que he probado basado en lo que tiene sentido para mí. Realmente no puedo pensar en otra forma de hacerlo.
for(int i = SnakeLength - 1; i > 0; i--){
current = SnakePart[i], next = SnakePart[i - 1];
current.x = next.x - (current.width * cos(next.angle));
current.y = next.y - (current.height * sin(next.angle));
current.angle = next.angle;
}
SnakeHead.x += cos(SnakeAngle) * SnakeSpeed;
SnakeHead.y += sin(SnakeAngle) * SnakeSpeed;
Esto produce algo como esto: Código en acción . Como puede ver, cada parte siempre permanece detrás de la cabeza y no produce un efecto "Trail".
Un ejemplo perfecto de lo que estoy buscando se puede encontrar aquí: Data Worm . No es la rotación de la vista sino el efecto final de los triángulos.
¡Gracias por cualquier ayuda!