Olá pessoal, tudo bem.
Estou criando um jogo, no entando cheguei na parte de fazer o movimento da nave (o jogo é uma espécie de space invaders).
O programa está estruturado da seguinte forma (por enquanto):
Classe Main a qual instancia o objeto da classe janela , a Classe Janela que extends JFrame (a qual adiciona o painel) e a Classe PainelGame extends JPanel implements KeyListener a qual possui os components do jogo, invasores e a nave que você controla.
Código:
class Janela extends JFrame
{
public Janela()
{
PainelGame painelGame = new PainelGame();
add(painelGame);
// mudar focus para o painel.
}
}
import java.awt.Color;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.*;
public class PainelGame extends JPanel implements KeyListener
{
private JLabel barra;
private JLabel label[] = new JLabel[10];
private JLabel nave;
private JLabel tiro;
private Rectangle invasores[] = new Rectangle[10];
private int k;
public PainelGame()
{
setBackground(Color.black);
setLayout(null);
nave = new JLabel();
nave.setIcon(new ImageIcon(getClass().getResource("/Imagens/nave.jpg")));
tiro = new JLabel();
tiro.setIcon(new ImageIcon(getClass().getResource("/Imagens/tiro.jpg")));
barra = new JLabel();
barra.setBounds(0,644,1000,30);
barra.setIcon(new ImageIcon(getClass().getResource("/Imagens/barraInfo.jpg")));
add(barra);
add(nave);
add(tiro);
nave.setBounds(0,600,50,50);
k = 50;
for(int i=0;i<invasores.length;i++)
{
invasores[i] = new Rectangle();
label[i] = new JLabel();
invasores[i].setBounds(k,20,50,50);
label[i].setBounds(k,20,50,50);
label[i].setIcon(new ImageIcon(getClass().getResource("/Imagens/invader.jpg")));
k = k + 50;
add(label[i]);
}
addKeyListener(this);
}
public void keyTyped(KeyEvent e)
{
}
public void keyPressed(KeyEvent e)
{
if( e.getKeyCode() == e.VK_ENTER)
{
nave.setBounds(0,300,50,50);
}
}
public void keyReleased(KeyEvent e)
{
}
}
O problema é o seguinte: após apertar o Enter o JLabel da nave deveria se mover para a cordenada 0,300 mas isso não acontece, acredito que isso seja problema em relação ao Focus, até tentei colocar “requestFocus()”, mas não adiantou. Alguem sabe pq ocorre tal problema?
[]
ArchV.
