Somos quatro caras fazendo um jogo de Tower Defense como um projeto na primeira série de uma universidade. O jogo vai ser muito simples!
- Três torres diferentes
- Três monstros diferentes
- Um mapa (talvez adicione mais se tivermos tempo)
O jogo deve ser orientado a objetos.
A estrutura da classe é a seguinte
- Jogo - Desenho de gráfico, etc.
- Nível - Todo nível é um objeto desta classe. Cada nível tem um número finito de objetos de onda (em uma lista)
- Wave - Contém uma lista de objetos-monstro.
- Monstro - Esta é uma superclasse. Criamos subclasses para os diferentes tipos de monstros
- Torre - Superclasse para as torres. Existem subclasses para cada tipo de torre.
Estamos pensando em como resolver o problema que muitos objetos precisam fazer, ao mesmo tempo, por exemplo, mover um pixel em uma direção.
O que surgiu foi a idéia de implementar uma classe Timer, para controlar quando os objetos fazem as coisas. Não sei se essa é a melhor maneira de fazê-lo. Alguém poderia dar algumas boas idéias sobre como resolver o caso de atualização contínua?
Basicamente, eu uso um loop de atualização e não um sistema baseado em eventos.
Para atualizar monstros, você pode iterar uma lista de monstros e atualizá-los no loop de atualização com, digamos,
monster.update()
Se um monstro tem que andar, ele precisa atualizar sua posição. Portanto, no método de atualização, calculo a nova posição com base no tempo decorrido, que é armazenado em uma classe 'timer' separada.
Isso deve ser todo o material 'andando';)
fonte
elapsedTime * movementPerSecond
. Ou você poderia ter um cooldown sobre a torre de tiro:if(cooldown > 0){ cooldown -= elapsedTime } else { cooldown = X, shoot(); }
etc.Suponho que ele cumpra bem seu objetivo em um projeto uni, mas em um jogo real eu teria uma classe de monstros concreta e, em vez de subclassificar tipos, teria os diferentes tipos de monstros descritos nos arquivos de dados. Velocidade, pontos de vida, resistências a diferentes tipos de dano e sprites podem ser perfeitamente descritos em arquivos, será mais fácil adicionar novos tipos de monstros ao seu jogo e você não precisará compilar cada vez que quiser quer fazer isso.
Enfim, sobre o movimento. Dê a todos os seus objetos "móveis" diferentes uma variável de velocidade. Cada quadro em sua lógica de jogo, você percorre todos esses objetos móveis e faz algo como
Isso se aplica a monstros, mísseis de torres, etc ...
fonte