Somos cuatro chicos haciendo un juego de Tower Defense como un proyecto en primer grado en una universidad. ¡El juego va a ser realmente simple!
- Tres torres diferentes
- Tres monstruos diferentes
- Un mapa (quizás agregue un poco más si tenemos tiempo)
El juego tiene que estar orientado a objetos.
La estructura de clases es la siguiente
- Juego - Dibujo de gráficos, etc.
- Nivel : cada nivel es un objeto de esta clase. Cada nivel tiene un número finito de objetos de onda (en una lista)
- Ola : contiene una lista de objetos monstruosos.
- Monstruo : esta es una superclase. Hacemos subclases para los diferentes tipos de monstruos.
- Torre - Superclase a las torres. Hay subclases para cada tipo de torre.
Estamos pensando en cómo resolver el problema de que muchos objetos tienen que hacer cosas, al mismo tiempo, por ejemplo, mover un píxel en una dirección.
Se nos ocurrió la idea de implementar av class Timer, para controlar cuándo los objetos hacen las cosas. No estoy seguro de que esta sea la mejor manera de hacerlo. ¿Podría alguien dar algunas buenas ideas sobre cómo resolver el caso de actualización continua?
Básicamente, uso un ciclo de actualización y no un sistema basado en eventos.
Para actualizar monstruos, puede iterar una lista de monstruos y actualizarlos en el ciclo de actualización con, digamos,
monster.update()
Si un monstruo tiene que caminar, debe actualizar su posición. Entonces, en el método de actualización calculo la nueva posición en base al tiempo transcurrido, que se almacena en una clase separada de 'temporizador'.
Eso debería ser todo lo de 'caminar';)
fuente
elapsedTime * movementPerSecond
. O podrías tener un enfriamiento en la torre de tiro:if(cooldown > 0){ cooldown -= elapsedTime } else { cooldown = X, shoot(); }
etc.Supongo que cumplirá bien su propósito para un proyecto uni, pero en un juego real tendría una clase de monstruo concreta y, en lugar de subclasificar por tipos, tener los diferentes tipos de monstruos descritos en los archivos de datos. La velocidad, los puntos de vida, las resistencias a los diferentes tipos de daños y los sprites se pueden describir perfectamente en los archivos, te facilitará agregar nuevos tipos de monstruos a tu juego, y no tendrás que compilar cada vez que quiero hacerlo
De todos modos, sobre el movimiento. Dele a todos sus objetos "móviles" una variable de velocidad diferente. Cada cuadro en la lógica de tu juego recorres todos esos objetos móviles y haces algo como
Esto se aplica a monstruos, misiles de torres, etc.
fuente