Atividade 11 - Máquinas de estados e função KeyPressed()
A proposta da atividade é reimplementar a aplicação desenvolvida em sala, que utiliza máquina de estados para fazer imagens serem mostradas de acordo com teclas pressionadas.
Nessa aplicação, utilizaremos três bitmaps do Mário:
De início, defini variáveis PImage para guardar as respectivas imagens. Após isso criei três variáveis que representarão os três estados do Mario, sendo 1 para parado, 2 para andando e 3 para martelando. Criei também uma variável para guardar o estado atual do Mário, uma para guardar o tempo e outra para saber quando a tecla está pressionada (que de inicial recebe false).
Chegou a hora de tratarmos os estados, para isso criei uma função para processá-los. Nela verifico se o estado atual é 2 ou 3, caso seja, o tempo aumenta incrementa mais 1. Para voltar ao estado parado após determinado tempo, crio duas condições para checar isso. Na primeira verifico se o tempo é maior que 30 e se o estado é andando. Caso seja, o estado atual volta a ser parado, e o tempo é zerado. Na segunda condição fiz o mesmo, porém com o estado martelando, e o tempo maior que 60.
Crio outra função para mostrar as imagens de cada estado, e ela recebe como parâmetro o estado atual. Nela crio três condições para saber qual estado ela está, e dentro de cada uma mostro a imagem referente ao estado.
Após isso, basta chamar as funções criadas no evento draw().
Por último, para verificar o pressionar dos botões, utilizei a função keyPressed(). Essa função verifica se alguma tecla é pressionada, se assemelhando muito com a variável keyPressed, porém esta é uma variável booleana que retorna verdadeiro ou falso, diferente da função que executa um bloco de códigos caso alguma tecla seja pressionada. Outra diferença é que a função só é chamada uma vez, diferente da variável, que recebe direto verdadeiro caso você segure alguma tecla por exemplo.
Dentro da função, verifico dentro de uma condição se a tecla left foi pressionada, utilizando a variável keyCode, e verifico também se a variável de verificação que criei no início é igual a false. Caso sejam, o estado atual recebe andando e a variável de verificação recebe true.
Faço o mesmo para saber se a tecla espaço foi pressionada, mudando o estado para martelando. Nesse caso utilizo a variável key ao invés da keyCode, por se tratar de um caractere ASCII.
Após isso crio a função keyReleased() para quando uma tecla deixar de ser pressionada, a variável de verificação volte a ser false.
Para baixar o código do projeto clique aqui
Nessa aplicação, utilizaremos três bitmaps do Mário:
Chegou a hora de tratarmos os estados, para isso criei uma função para processá-los. Nela verifico se o estado atual é 2 ou 3, caso seja, o tempo aumenta incrementa mais 1. Para voltar ao estado parado após determinado tempo, crio duas condições para checar isso. Na primeira verifico se o tempo é maior que 30 e se o estado é andando. Caso seja, o estado atual volta a ser parado, e o tempo é zerado. Na segunda condição fiz o mesmo, porém com o estado martelando, e o tempo maior que 60.
Crio outra função para mostrar as imagens de cada estado, e ela recebe como parâmetro o estado atual. Nela crio três condições para saber qual estado ela está, e dentro de cada uma mostro a imagem referente ao estado.
Após isso, basta chamar as funções criadas no evento draw().
Por último, para verificar o pressionar dos botões, utilizei a função keyPressed(). Essa função verifica se alguma tecla é pressionada, se assemelhando muito com a variável keyPressed, porém esta é uma variável booleana que retorna verdadeiro ou falso, diferente da função que executa um bloco de códigos caso alguma tecla seja pressionada. Outra diferença é que a função só é chamada uma vez, diferente da variável, que recebe direto verdadeiro caso você segure alguma tecla por exemplo.
Dentro da função, verifico dentro de uma condição se a tecla left foi pressionada, utilizando a variável keyCode, e verifico também se a variável de verificação que criei no início é igual a false. Caso sejam, o estado atual recebe andando e a variável de verificação recebe true.
Faço o mesmo para saber se a tecla espaço foi pressionada, mudando o estado para martelando. Nesse caso utilizo a variável key ao invés da keyCode, por se tratar de um caractere ASCII.
Após isso crio a função keyReleased() para quando uma tecla deixar de ser pressionada, a variável de verificação volte a ser false.
Resultado final
Para baixar o código do projeto clique aqui




Comentários
Postar um comentário