Como irei desenvolver jogos com uma IDE e um Framework, o que esconde a programação mais complexa por trás do game, irei postar algumas coisas sobre como funciona está lógica "oculta".
A a lógica do funcionamento de um jogo, vista de uma perspectiva ampla, é bem simples:
Há uma entrada (inputs) de informação;
O jogo fica em um looping infinito processando seus métodos;
Quando certos requisitos são fechados, o jogo termina, para o bem ou para o mal.
As entradas são conhecidas, não preciso me alongar sobre elas. Cabe ressaltar que mesmo a Unity sendo um facilitador, e compilando em quase todas as plataformas, são necessários scripts diferentes para que o jogo funcione no controle, ou no mouse e teclado, ou na tela touch.
O looping infinito é um caso interessante para que se entenda a lógica do desenvolvinento.
Vamos pensar em um shooter x boots.
O jogo renderiza imagens a todo instante, criando os conhecidos FPS (Frames Por Segundo), também faz com que seus personagens tomem decisões a todo instante, mudando elas de acordo com certas variáveis. O jogo também fica lendo certos status para saber quando é Game Over ou quando você atingiu certo número de Frags e ganhou.
Mas para quem conhece programação, sabe que normalmente um software só age quando "provocado". Além do mais, a estrutura básica de um programa é sequencial, se o método botPensando() está rodando, o método atingiuAsFrags() fica "na fila".
Para isso, o jogo usa o que chamamos de Runnable, uma forma de trabalho que fica perguntanto, o mais rápido possivel, a todos os métodos, o que eles tem para nos responder.
método run()
{
atualizaTela();
botPensano();
atingiuAsFrags();
}
Estes 3 métodos serão chamados inúmeras vezes por segundo, assim, a todo instante:
a tela será recriada atualizando a imagem;
o bot tomará decisões;
e o jogo irá verificar se a partida acabou.
Outra questão interessante é que os métodos correm de forma "livre" (assíncrona). Um não fica esperando o outro. Pois a atualização de frames será sempre a mais rápida o possível, enquanto o movimento do bot será dentro de uma linha temporal bem definida.
No mais, este mesmo runnable tem de saber a hora de acabar. Para isso, sempre haverá uma estrutura perguntando se a partida acabou. Caso afirmativo, o looping para.
gameover = false;
método run()
{
atualizaTela();
botPensano();
gameover = atingiuAsFrags();
SE (gameover for igual a TRUE)
{
runableStop
}
}
Softwares que facilitam o trabalho escondem tudo isso do usuário. A própria Unity decide como organiza seus códigos, e onde coloca os scripts criados pelo autor. Mesmo assim, bons scripts e um software organizados são importantes, tanto para manutenção quanto para que a Unity venha a fazer o seu melhor ao gerar a arquitetura dos códigos.
Nenhum comentário:
Postar um comentário