• Teclado

    Neste tutorial, iremos explicar como utilizar o teclado para controlar as interações do usuário com o jogo.

    Para usar o teclado, utilizamos a classe Keyboard do pacote JPlay.

    Não é preciso criar uma instância da classe Keyboard, pois ao criar um objeto da classe Window, uma instância do primeiro é criada. Assim, todos os objetos do jogo irão utilizar o mesmo keyboard.

    Para ter acesso ao Keyboard oferecido pelo objeto da classe Window, usamos o método:

    Keyboard getKeyboard();

    1 - Teclas Padrões

    A classe Keyboard disponibiliza um conjunto de teclas padrão para ser usado na movimentação dos elementos do jogo, por exemplo. Para acessar os códigos destas teclas digite Keyboard seguido de um ponto final. Esta ação irá; resultar no aparecimento de vá;rias opçõ;es de teclas.

    As teclas defaults do teclado do JPlay são as seguintes:
    DOWN_KEY, ENTER_KEY, ESCAPE_KEY, LEFT_KEY, RIGHT_KEY, SPACE_KEY,UP_KEY.

    2 - Teclas pressionadas e comportamento de teclas

    Para determinar se uma tecla está pressionada usamos o método:

    								//Retorna 'true' se a tecla representada pelo keyCode está pressionada, senão retorna 'false'.
    								public boolean keyDown(int keyCode);
    							

    No exemplo a seguir, o método keyDown irá; determinar se a tecla ESC (Keyboard.ESCAPE_KEY) está; pressionada ou não. Em caso positivo, o jogo será; encerrado.

    Exemplo: Quando pressionar a tecla ESC sai do jogo.

    								package teclado001;
    
    								import JPlay.GameImage;
    								import JPlay.Keyboard;
    								import JPlay.Window;
    
    								/**
    								 * @author Gefersom Cardoso Lima
    								 * Universidade Federal Fluminense - UFF - Brasil - 2010
    								 * Ciência da Computação
    								 */
    
    								public class teclado001
    								{
    									//Quando pressionar a tecla ESC sai do jogo
    									public static void main(String[] args)
    									{
    										Window janela = new Window(800,600);
    										Keyboard keyboard = janela.getKeyboard();
    										GameImage backGround = new GameImage("fundo.png");
    
    										boolean executando = true;
    										while(executando)
    										{
    												backGround.draw();
    												janela.display();
    
    												//ao contrário, retorna false.
    												if (keyboard.keyDown(Keyboard.ESCAPE_KEY) )
    													executando = false;
    										}
    
    										//Fecha a janela e sai do jogo
    										janela.exit();
    									}
    								}
    							
    							


    Agora que o método keyDown foi explicado, podemos detalhar os dois comportamentos que as teclas podem assumir:

    DETECT_EVERY_PRESS - a cada iteração do loop o método keyDown() do teclado retorna true se a tecla estiver pressionada, ou seja, retorna true enquanto a tecla estiver pressionada.

    DETECT_INITIAL_PRESS_ONLY – se a tecla tiver esse comportamento, o método keyDown() só irá; retornar true no momento do pressionamento da tecla, diferentemente do DETECT_EVERY_PRESS, que retorna true enquanto a tecla estiver pressionada. Isso significa que o método keyDown() só irá; retornar true outra vez quando a tecla for liberada e novamente pressionada.

    O comportamento DETECT_EVERY_PRESS pode ser usado para a movimentação de um personagem, já; que para ele se movimentar é necessá;rio manter determinada tecla pressionada. O DETECT_INITAL_PRESS_ONLY pode ser usado para fazer um personagem ou nave atirar uma única vez, fazendo com que o jogador tenha que soltar a tecla e pressioná;-la novamente para atirar.

    3 - Adicionando teclas

    Para adicionar uma tecla, diferente das já fornecidas pela classe Keyboard, é necessário saber qual o código da tecla. Para isso, utilize a classe KeyEvent, que está presente no Java. Ela possui os códigos de todas as teclas.

    Para acessar os códigos das teclas digite ' KeyEvent.VK_ '.

    Para adicionar uma tecla use os métodos abaixo presentes na classe Keyboard:

     
    								void addKey(int  keyCode);
    								//ou 
    								void addKey(int keyCode, int behavior);
    							

    Em void addKey(int keyCode, int behavior) os parâmetros são o código da tecla que se deseja adicionar e o comportamento da mesma.

    Exemplo: adicionar a tecla control ao teclado do JPlay.

     teclado.addKey( KeyEvent. VK_CONTROL); 

    Usando o método addKey(int keyCode) adicionamos uma tecla e seu comportamento será; DETECT_INITIAL_PRESS_ONLY.

    Se você quiser que o comportamento seja DETECT_EVERY_PRESS, use o método addKey(int keyCode, int behavior) do seguinte modo:

     teclado.addKey(KeyEvent.VK_CONTROL, Keyboard.DETECT_EVERY_PRESS). 

    Obs.: Se for feita a tentativa de adicionar uma tecla já existente, a mesma será substituida por aquela que estiver sendo adicionada, pois, há a possibilidade da nova tecla ter um comportamento diferente da anterior.

    4 - Comportamentos das teclas padrões

    As teclas UP_KEY, LEFT_KEY, RIGHT_KEY e DOWN_KEY possuem o comportamento DETECT_EVERY_PRESS.

    As teclas ESCAPE_KEY, SPACE_KEY e ENTER_KEY possuem o comportamento DETECT_INITAL_PRESS_ONLY.

    5 - Mudando o comportamento de uma tecla

    Para mudar o comportamento de uma tecla utilize o método abaixo presente na classe Keyboard do JPlay:

    void setBehavior(int key, int behavior);

    Exemplo: Mudando o comportamento da tecla UP_KEY:

    teclado.setBehavior(Keyboard.UP_KEY, Keyboard.DETECT_INITIAL_PRESS_ONLY); 

    Os parâmetros a serem passados são: o código da tecla e o novo comportamento.

     

    6 - Removendo uma tecla

    Para remover uma tecla do teclado do JPlay use o método:

    void removeKey(int keyCode);

    Exemplo: Adiciona a tecla G que será usada para encerrar o jogo e remove a tecla ESCAPE.

    								package teclado002;
    
    								import JPlay.GameImage;
    								import JPlay.Keyboard;
    								import JPlay.Window;
    								import java.awt.event.KeyEvent;
    
    								/**
    								 * @author Gefersom Cardoso Lima
    								 * Universidade Federal Fluminense - UFF - Brasil - 2010
    								 * Ciência da Computação
    								 */
    
    								public class teclado002
    								{
    									//Adiciona uma tecla ao teclado com o comportamento DETECT_INITIAL_PRESS_ONLY
    									public static void main(String[] args)
    									{
    										Window janela = new Window(800,600);
    										Keyboard keyboard = janela.getKeyboard();
    										GameImage backGround = new GameImage("fundo.png");
    
    										//Adiciona a tecla G com o comportamento DETECT_INITIAL_PRESS_ONLY
    										keyboard.addKey(KeyEvent.VK_G);
    
    										//Adiciona a tecla ESC ao teclado
    										keyboard.removeKey(KeyEvent.VK_ESCAPE);
    
    										boolean executando = true;
    										while(executando)
    										{
    												backGround.draw();
    												janela.display();
    												if ( keyboard.keyDown(KeyEvent.VK_G) )
    													executando = false;
    										}
    										janela.exit();
    									}
    								}
    							

    Observação:

    As seguintes teclas são as mesmas, ou melhor, o código de tecla representando:

    Keyboard.UP_KEY = KeyEvent.VK_UP
    Keyboard.DOWN_KEY = KeyEvent.VK_DOWN

    Keyboard.LEFT_KEY = KeyEvent.VK_LEFT

    Keyboard.RIGHT_KEY = KeyEvent.VK_RIGHT

    Keyboard.ESCAPE_KEY = KeyEvent.VK_ESCAPE

    Keyboard.SPACE_KEY = KeyEvent.VK_SPACE

    Keyboard.ENTER_KEY = KeyEvent.VK_ENTER

    UFF - Universidade Federal Fluminense - Institudo de Computação - Ciência da Computação