Tarefa da aula 09: Pong para um jogador - keyPressed e keyPressed()
Objetivo:
Reimplementar o jogo Pong para um jogador empregando a função keyPressed() e comparar o uso da mesma em relação ao emprego original da variável de sistema keyPressed.
Inicialmente em sala, fizemos o jogo Pong para um jogador usando o sistema MVC (modelo, visualização e controle). A parte do controle, os inputs do usuário, foi feita usando a variável keyPressed. Agora temos que ao invés dela, usar a função keyPressed() e comparar os resultados.
Pois bem, inicialmente, temos o código da aula, feito com a variável interna keyPressed:
Após a implementação da função keyPressed() não é possível notar nenhuma diferença visual do jogo, mas no aspecto do controle temos algumas mudanças fundamentais. Mas antes vamos ver como a variável keyPressed e a função keyPressed() funcionam.
A variável keyPressed é uma variável interna do Processing, e é do tipo booleana, ou seja ela só pode ser verdadeira ou falsa. A implementação dela no jogo acontece dentro do void draw(), mais especificamente em uma estrutura condicional, e é usada para checar se alguma tecla está sendo segurada. Se isso acontecer, eu checo se é a tecla UP ou DOWN, para controlar o bastão no jogo. Note que por estar dentro do void draw(), ele é checada várias vezes durante o ciclo de execução do Processing.
Já a função keyPressed() checa se alguma tecla foi pressionada e armazena o valor dessa tecla dendo da variável key, se a tecla for um caractere, ou keyCode, se for um caractere especial, como as nossas teclas UP e DOWN que controlam o bastão. Na nova versão do jogo, essa função é implementada de uma forma bastante parecida com a condição para a variável keyPressed, quando o jogador pressione um tecla, novas condição são checadas, e se as teclas forem UP ou DOWN, o bastão se move para cima ou para baixo:
A grande diferença aqui, que alterando bastante o controle do jogador, é a forma como essa função trabalha. Como ela checa apenas o momento em que a tecla é pressionada e executa uma série de precedimentos internos mais complexos e não faz parte do void draw(), ou seja, não é executada várias vezes por segundo, a resposta ao input do usuário acaba sendo muito mais lenta, e além disso, por estar fora do ciclo de execução do void draw, a velocidade do input está sujeita a variação do tempo de processamento do computador, podendo varia de máquina para máquina. A solução encontrada para que o jogador não fosse prejudicado, foi aumentar o deslocamento do bastão e 7 pixels para cima ou para baixo (dependendo do botão pressionado), para 100 pixels.
Essa mudança altera drasticamente a forma de jogar, já que agora o jogador não deve mais segurar uma das teclas para que o deslocamento do bastão aconteça, mas sim pressionar uma delas para mover o bastão em setores, que neste caso, são do mesmo tamanho dele.




Comentários
Postar um comentário