Nesse tutorial vamos mostrar uma maneira de como usar eventos do teclado
para controlar algumas ações nos nossos jogos. é realmente muito
simples fazer isso! tudo que iremos fazer é implementar uma Interface na nossa classe, reescrever os métodos abstratos dessa interface, e adicionar um escutador de teclas no nosso JFrame!
(Criem um pacote tutorial12 no nosso projeto JAVAGAMES2D com o arquivo Game.java)
(Criem um pacote tutorial12 no nosso projeto JAVAGAMES2D com o arquivo Game.java)
Vamos lá!
1º passo implemente na Classe Game.java a seguinte Interface: KeyListiner
1
| public class Game extends JFrame implements KeyListener{ |
Quando fizer isso salve as alterações, como eu uso o Eclipse ele vai acusar um erro, informando que eu preciso adicionar a implementação dos métodos da interface Keylistner, observe a figura abaixo:
agora vamos usar um truque do Eclipse, observe o x vermelho antes de public class, dê um clique sobre esse ícone, que irá aparecer o seguinte:
Agora basta dar um duplo clique em Add unimplmented methods, para que o Eclipse adicione automaticamente essas linhas de código no final da classe Game.java
1: @Override
2: public void keyPressed(KeyEvent e) {
3: // TODO Auto-generated method stub
4: }
5: @Override
6: public void keyReleased(KeyEvent e) {
7: // TODO Auto-generated method stub
8: }
9: @Override
10: public void keyTyped(KeyEvent e) {
11: // TODO Auto-generated method stub
12: }
... O que temos ai é o seguinte: três métodos sem retorno (void), que recebe um parâmetro do tipo KeyEvent, (caso queiram apaguem esses comentários gerado pelo Eclipse)
//TODO Auto-generated method stub
@Override
Agora para finalizar vamos adicionar no nosso método inicializar() o escutador de teclas que é que vai acionar esses três métodos que foram criados toda vez que um evento de teclado for acionado!
1: public void inicializar() {
2: setTitle("Titulo do Jogo!");
3: setSize(janelaW, janelaH);
4: setResizable(false);
5: setDefaultCloseOperation(EXIT_ON_CLOSE);
6: setLayout(null);
7: setVisible(true);
8: backBuffer = new BufferedImage(janelaW, janelaH, BufferedImage.TYPE_INT_RGB);
9: //AQUI ESTAMOS ADICIONANDO UM ESCUTADOR DE TECLAS
10: addKeyListener(this);
11: }
Falando brevemente sobre os três métodos criados:
O keyPressed é acionado no momento em que você pressiona a tecla e enquanto ela estiver pressionada
O keyReleased é acionado no momento em que você libera a tecla pressionada
O keyTyped é acionado toda vez que o usuário digitar um caractere em algum elemento que está com o foco!
Muito bem.... agora vamos ver um um bom exemplo, vamos exibir a tecla que o usuário pressionou e mover uma bola com as teclas direcionais....
(Leia os comentários com atenção!)
1: import java.awt.*;
2: import java.awt.event.KeyEvent;
3: import java.awt.event.KeyListener;
4: import java.awt.image.BufferedImage;
5: import java.io.File;
6: import javax.swing.ImageIcon;
7: import javax.swing.JFrame;
8: public class Game extends JFrame implements KeyListener{
9: BufferedImage backBuffer;
10: int FPS = 30;
11: int janelaW = 500;
12: int janelaH = 500;
13: //VAMOS EXIBIR A TECLA PRESSIONADA
14: //E MOVER UMA BOLA COM AS DIRECIONAIS
15: //OBSER ISSO LÁ NO MÉTODO desenaharGraficos()
16: char teclaPressionada;
17: int xBola = 200;
18: int yBola = 200;
19: public void atualizar() {
20: }
21: public void desenharGraficos() {
22: Graphics g = getGraphics(); //ISSO JÁ ESTAVA AQUI
23: Graphics bbg = backBuffer.getGraphics();//ISSO TAMBÉM JÁ ESTAVA AQUI...
24: bbg.setColor(Color.WHITE);
25: bbg.fillRect(0, 0, janelaW, janelaH); //PINTA O FUNDO COM UM QUADRADO BRANCO
26: bbg.setColor(Color.RED);
27: bbg.setFont(new Font("helvica",Font.BOLD,20));
28: bbg.drawString("Você pressionou: "+teclaPressionada, 50, 100); //EXIBE UM TEXTO + O VALOR DA TECLA PRESSIONADA
29: //QUE ESTÁ NA VARIÁVEL teclaPressionada
30: //DESENHA UMA BOLA VERMELHA NA TELA
31: bbg.fillOval(xBola, yBola, 50, 50);
32: //AGORA VEJA O CÓDIGO DO MÉTODO keyPressed()
33: //LÁ VAMOS DIZER O QUE VAI ACONTECER QUANDO UM TECLA FOR PRESSIONADA!!!
34: //==================================================================================
35: g.drawImage(backBuffer, 0, 0, this);//OBS: ISSO DEVE FICAR SEMPRE NO FINAL!
36: }
37: public void inicializar() {
38: setTitle("Titulo do Jogo!");
39: setSize(janelaW, janelaH);
40: setResizable(false);
41: setDefaultCloseOperation(EXIT_ON_CLOSE);
42: setLayout(null);
43: setVisible(true);
44: backBuffer = new BufferedImage(janelaW, janelaH, BufferedImage.TYPE_INT_RGB);
45: //AQUI ESTAMOS ADICIONANDO UM ESCUTADOR DE TECLAS
46: addKeyListener(this);
47: }
48: public void run() {
49: inicializar();
50: while (true) {
51: atualizar();
52: desenharGraficos();
53: try {
54: Thread.sleep(1000/FPS);
55: } catch (Exception e) {
56: System.out.println("Thread interrompida!");
57: }
58: }
59: }
60: public static void main(String[] args) {
61: Game game = new Game();
62: game.run();
63: }
64: //ESSES SÃO OS MÉTODOS DE EVENTOS DO TECLADO
65: public void keyPressed(KeyEvent e) {
66: //AQUI A VARIAVEL VAI RECEBER O VALOR UNICODE DA TECLA QUE O USUÁRIO PRESSIONAR!!!
67: teclaPressionada = e.getKeyChar();
68: //OBS: e.VK_ depois pressione ctrl+espaço para autocompletar!
69: //ai tem todas as teclas do teclado!!!
70: //SE A TECLA PRESSIONADA FOR LEFT = ESQUERDA xBola diminue 10
71: if(e.getKeyCode() == e.VK_LEFT){
72: xBola -= 10;
73: }
74: //SE A TECLA PRESSIONADA FOR RIGHT = DIREITA xBola aumenta 10
75: if(e.getKeyCode() == e.VK_RIGHT){
76: xBola += 10;
77: }
78: //SE A TECLA PRESSIONADA FOR UP = CIMA yBola diminue 10
79: if(e.getKeyCode() == e.VK_UP){
80: yBola -= 10;
81: }
82: //SE A TECLA PRESSIONADA FOR DOWN = BAIXO yBola aumenta 10
83: if(e.getKeyCode() == e.VK_DOWN){
84: yBola += 10;
85: }
86: }//FIM DO MÉTODO keyPressed()
87: public void keyReleased(KeyEvent e) {
88: }
89: public void keyTyped(KeyEvent e) {
90: }
91: }
Muito bem.... vejam como ficou o meu:
Então é isso.... até o próximo tutorial, não deixem de comentar ou postar suas dúvidas aqui....
Nenhum comentário:
Postar um comentário