blz galera estou fazendo um jogo em 2D em Java, só que dei uma travada em um erro.
Estou tentando instanciar o teclado na fase e não estou conseguindo, preciso de uma ajuda.
Imagino que seja um erro simples, segue o código com 4 classes.
package meujogo;
import javax.swing.JFrame;
import meujogo.Modelo.Fase;
public class Container extends JFrame {
public Container () {
//Add_no_fundo
add(new Fase());
//Titulo_do_Jogo
setTitle("Meu Jogo");
//Tamanho_da_Pagina_Largura_e_Altura
setSize(900,728 );
//Quando_clicar_no_X_Fechar
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//ponto_da_tela_que_vai_aparecer_quando_iniciar_NULL =_Meio
setLocationRelativeTo(null);
//Comando_Para_maximilizar_e_Minimizar_a_Tela_False=não_muda_a_resoluçaõ
this.setResizable(false);
//Comando_para_definir_que_os_comandos_acima_seja_vizivel
setVisible (true);
}
public static void main (String []args) {
new Container();
}
}
package meujogo.Modelo;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.List;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.Timer;
public class Fase extends JPanel implements ActionListener{
private Image fundo;
//Colocando_Player_na_fase
private Player player;
private Timer timer;
public Fase() {
//melhorando_o_desempenho
setFocusable(true);
setDoubleBuffered(true);
//metodo_ImageIcon_recebe_a_imagem_de_fundo
//Criei_um_folder_chamado_res_e_salvei_a_imagem
ImageIcon referencia = new ImageIcon("res\\background.jpg");
fundo = referencia.getImage();
player = new Player();
//carregar_a_imagem_do_Player
player.load();
//estancia_teclado_na_fase
addKeyListener (new TecladoAdapter());
//velocidade_do_jogo_e_iniciar_o_jogo
timer = new Timer(5, this);
timer.start();
}
//Printar_na_tela
public void paint (Graphics g) {
Graphics2D graficos = (Graphics2D) g;
graficos.drawImage(fundo, 0, 0, null);
graficos.drawImage(player.getImagem(), player.getX(), player.getY(), this);
List<Tiro> tiros = player.getTiros(); {
for (int i = 0; i < tiros.size(); i++) {
Tiro m = tiros.get(i);
m.load();
graficos.drawImage(m.getImagem(), m.getX(), m.getY(), this);
}
}
g.dispose();
}
@Override
public void actionPerformed (ActionEvent e) {
//metodo_para_atualizar_a_tela
player.update();
//pegando_a_lista_de_tiro_e_colocando_na_fase
List<Tiro> tiros = player.getTiros(); {
for (int i = 0; i < tiros.size(); i++) {
Tiro m = tiros.get(i);
if(m.isVisivel()) {
m.update();
} else {
tiros.remove(i);
}
}
//não_deixa_a_imagem_ficar_varias_vezes_na_tela
repaint();
}
//metodo_entrada_de_teclado
class TecladoAdapter extends KeyAdapter {
@Override
public void keyPressed (KeyEvent e) {
player.KeyPressed(e);
}
@Override
public void keyReleased (KeyEvent e) {
player.KeyRelease (e);
}
}
}
}
package meujogo.Modelo;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.ImageIcon;
public class Player {
//X_Y_usados_para_Mover_quando_apertar_o_botao
//Altura_e_Largura_usada_para_colisao
private int x,y;
private int dx, dy;
private Image imagem;
private int altura, largura;
private List <Tiro> tiros;
//Construtor
public Player() {
//Definindo_coordenada_da_tela_que_começa_o_jogo
this.x = 100;
this.y = 100;
tiros = new ArrayList <Tiro>();
}
//metodo_para_definir_imagem_do_Player
public void load() {
ImageIcon referencia = new ImageIcon("res\\spaceship.png");
imagem = referencia.getImage();
//definindo_altura_e_largura
altura = imagem.getHeight(null);
largura = imagem.getWidth(null);
}
//metodos_Para_mover_o_player_usando_o_teclado
public void update() {
x += dx;
y += dy;
}
//metodo_que_faz_o_tiro_sair_do_meio_da_nave
public void tiroSimples() {
this.tiros.add(new Tiro (x+largura, y + (altura/2)));
}
//metodo_entrada_do_teclado
//Quando_eu_pressionar_uma_tecla_ele_vai_reconhecer_e_fazer_uma_ação
public void KeyPressed (KeyEvent tecla) {
int codigo = tecla.getKeyCode();
//Comando_de_atirar
if(codigo == KeyEvent.VK_A) {
tiroSimples();
}
//Comando_pra_cima
if(codigo == KeyEvent.VK_UP) {
dy = -3;
}
if(codigo == KeyEvent.VK_DOWN) {
dy = 3;
}
if(codigo == KeyEvent.VK_LEFT) {
dx = -3;
}
if(codigo == KeyEvent.VK_RIGHT) {
dx = 3;
}
}
public void KeyRelease (KeyEvent tecla) {
int codigo = tecla.getKeyCode();
//Comando_pra_cima
if(codigo == KeyEvent.VK_UP) {
dy = 0;
}
if(codigo == KeyEvent.VK_DOWN) {
dy = 0;
}
if(codigo == KeyEvent.VK_LEFT) {
dx = 0;
}
if(codigo == KeyEvent.VK_RIGHT) {
dx = 0;
}
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public Image getImagem() {
return imagem;
}
public List<Tiro> getTiros() {
return tiros;
}
}
package meujogo.Modelo;
import java.awt.Image;
import javax.swing.ImageIcon;
public class Tiro {
//Imagem_do_Tiro
private Image imagem;
//Posição_do_tiro
private int x, y;
//Largura_e_Altura_do_tiro
private int largura, altura;
//Para_o_Tiro_sumir_quando_bater_ou_chegar_no_limite_da_tela
private boolean isVisivel;
private static final int LARGURA = 938;
private static int VELOCIDADE = 2;
//X-E-Y_faz_com_que_o_tiro_saia_da_posição_do_player
public Tiro(int x, int y) {
this.x = x;
this.y = y;
isVisivel = true;
}
//Carregando_a_Imagem
public void load () {
ImageIcon referencia = new ImageIcon ("res\\tiroSimples.png");
imagem = referencia.getImage ();
this.largura = imagem.getWidth(null);
this.altura = imagem.getHeight(null);
}
//Se_o_X_for_maior_que_a_largura_ficara_falso_e_ele_vai_sumir
public void update () {
this.x += VELOCIDADE;
if(this.x > LARGURA){
isVisivel = false;
}
}
public void setVisivel(boolean isVisivel) {
this.isVisivel = isVisivel;
}
public static int getVELOCIDADE() {
return VELOCIDADE;
}
public static void setVELOCIDADE(int vELOCIDADE) {
VELOCIDADE = vELOCIDADE;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public Image getImagem() {
return imagem;
}
public boolean isVisivel() {
return isVisivel;
}
}
package meujogo.Modelo;
import java.awt.Image;
import javax.swing.ImageIcon;
public class Tiro {
//Imagem_do_Tiro
private Image imagem;
//Posição_do_tiro
private int x, y;
//Largura_e_Altura_do_tiro
private int largura, altura;
//Para_o_Tiro_sumir_quando_bater_ou_chegar_no_limite_da_tela
private boolean isVisivel;
private static final int LARGURA = 938;
private static int VELOCIDADE = 2;
//X-E-Y_faz_com_que_o_tiro_saia_da_posição_do_player
public Tiro(int x, int y) {
this.x = x;
this.y = y;
isVisivel = true;
}
//Carregando_a_Imagem
public void load () {
ImageIcon referencia = new ImageIcon ("res\\tiroSimples.png");
imagem = referencia.getImage ();
this.largura = imagem.getWidth(null);
this.altura = imagem.getHeight(null);
}
//Se_o_X_for_maior_que_a_largura_ficara_falso_e_ele_vai_sumir
public void update () {
this.x += VELOCIDADE;
if(this.x > LARGURA){
isVisivel = false;
}
}
public void setVisivel(boolean isVisivel) {
this.isVisivel = isVisivel;
}
public static int getVELOCIDADE() {
return VELOCIDADE;
}
public static void setVELOCIDADE(int vELOCIDADE) {
VELOCIDADE = vELOCIDADE;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public Image getImagem() {
return imagem;
}
public boolean isVisivel() {
return isVisivel;
}
}
package meujogo.Modelo;
import java.awt.Image;
import javax.swing.ImageIcon;
public class Tiro {
//Imagem_do_Tiro
private Image imagem;
//Posição_do_tiro
private int x, y;
//Largura_e_Altura_do_tiro
private int largura, altura;
//Para_o_Tiro_sumir_quando_bater_ou_chegar_no_limite_da_tela
private boolean isVisivel;
private static final int LARGURA = 938;
private static int VELOCIDADE = 2;
//X-E-Y_faz_com_que_o_tiro_saia_da_posição_do_player
public Tiro(int x, int y) {
this.x = x;
this.y = y;
isVisivel = true;
}
//Carregando_a_Imagem
public void load () {
ImageIcon referencia = new ImageIcon ("res\\tiroSimples.png");
imagem = referencia.getImage ();
this.largura = imagem.getWidth(null);
this.altura = imagem.getHeight(null);
}
//Se_o_X_for_maior_que_a_largura_ficara_falso_e_ele_vai_sumir
public void update () {
this.x += VELOCIDADE;
if(this.x > LARGURA){
isVisivel = false;
}
}
public void setVisivel(boolean isVisivel) {
this.isVisivel = isVisivel;
}
public static int getVELOCIDADE() {
return VELOCIDADE;
}
public static void setVELOCIDADE(int vELOCIDADE) {
VELOCIDADE = vELOCIDADE;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public Image getImagem() {
return imagem;
}
public boolean isVisivel() {
return isVisivel;
}
}