Tarefa da aula 11: Mais estados para a MEF
Objetivo:
Apresentar e discutir a especificação e a implementação dos estados 'Pular Martelando' e 'Martelar Pulando'.
O código iniciado em sala já tinha 3 estados prontos: PARADO, MARTELANDO, e PULANDO. O objetivo era adicionar mais dois estados: PULAR MARTELANDO e MARTELAR PULANDO. A lógica aqui era pensar que, embora os dois estados fizessem coisas bastante parecidas, que seria fazer o personagem martelar enquanto está no ar, eles tinham implementações bastante diferentes entre si. Cada um é ativado a partir de estados diferentes, e eles são chamados com comando diferentes dados pelo jogador. Um é chamado com a barra de espaço e o outro é chamado com a seta para cima.
Como é possível notar na imagem, esses estados extras são independentes entre si e não interagem, ou seja, nenhum é ativado a partir do outro. Para alternar entre eles o personagem tem que voltar para o estado parado.
Como eu já tinha prontos outros dois estados, o de pulo duplo (PULANDOX2) e outro que era chamado a partir deste último (MARTELANDO_FORTE), eu quis adicionar mais alguns, que são exibidos do diagrama abaixo. A partir daqui, para facilitar a implementação, eu separei os estados em estados primários e secundários. Os secundários dependiam seriam chamados mais facilmente pelo jogador e os terciários eram chamados com maior coordenação motora, pressionando dois ou três teclas em sequência, dentro de um certo tempo.
O código mostrado mais abaixo já leva em conta a implementação de todos os estados citados acima, e como a implementação seguiu a mesma lógica para todos eles, não entrarei em tantos detalhes sobre cada um, mas o diagrama final ficou assim:
Primeiro eu carreguei as imagens, preparei o Canvas, defini as variáveis 'estadoMario' e 'tempoParado', que definiriam respectivamente o estado a ser executado no momento e o tempo para troca entre determinados estados. Além disso, eu criei uma máquina de estados para dizer qual sprite e sua posição para cada estado:
Agora próxima máquina de estados define um tempo de execução para que todos os estados voltem para o estado PARADO depois de chamados, exceto dois: MARTELAR_PULANDO e, MARTELAR_PULANDOX2, que devem mudar para um estado intermediário primeiro, o MARTELANDO_FORTE, que eu já havia criado.
Nessa parte do código é possível notar que a função keyPressed(), responsável por fazer a troca para todos os estados chamados pelo jogador, as condições são simples mas específicas: Cada tecla deve ser pressionada em um um estado específico, isso garante maior controle sobre cada estado do personagem.
Abaixo o resultado e o código completo:






Comentários
Postar um comentário