Galera seria redundante ficar cortando pedaço de codigo pra perguntar algo que engloba todo o escopo desse mini programa. Trata-se de um simples painel com um fundo, um vetor com pontos para posicionar uma certa imagem e uma imagem que, ao “clicar num ponto desse vetor” na tela, posiciona-se nela. Seriam elas fundo, pontos e corpo, sendo que pontos sao as coordenadas para impressao de certa imagem (sapos).
Agora o problema aqui eu ainda nao entendi pois compilou normal embora o output do meu compilador esteja dando alguns erros NullPointer em desenha().
Outra coisa se relaciona a interfaces e adaptadoras de interface. Me pergunto a utilidade de uma adaptadora de interface se vc nao pode simplesmente “implements MouseAdapter” :roll: Tive que implementar dentro do argumento de addMouseListener como poderao ver abaixo.
Vou colar o codigo pois o programa todo que fiz eh pequeno e simples de entender e obviamente necessario para alguem da comunidade que queira ajudar e entender o problema.
ansioso pela resposta,
rasta jones
---------------------------- Game.java ----------------------------
import java.awt.;
import java.awt.event.;
import javax.swing.*;
// ----- PAINEL ----- //
class GamePainel extends JPanel {
private static final int MAXPONTOS = 400;
private static final int TAMPONTOS = 20;
private Point[] pontos = new Point[MAXPONTOS];
private Point corpoPosicao = new Point(60,0);
private int atual = -1;
public GamePainel() {
addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent evt) {
int x = evt.getX();
int y = evt.getY();
atual = procura(x,y);
corpoPosicao.x=x; corpoPosicao.y=y;
if(atual>=0) remove(atual);
}
});
}
public int procura(int x, int y) {
for(int i=0; i < pontos.length; i++) {
if((pontos[i].x - TAMPONTOS / 2 <= x) && (x <= pontos[i].x + TAMPONTOS / 2) &&
(pontos[i].y - TAMPONTOS / 2 <= y) && (y <= pontos[i].y + TAMPONTOS / 2)) {
return i;
}
}
return -1;
}
public void remove(int i) {
pontos[i] = pontos[pontos.length-1];
atual = -1;
repaint();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
desenha(g);
}
public void desenha(Graphics g) {
Toolkit tk = Toolkit.getDefaultToolkit();
Image fundo = tk.getImage("fundo.gif");
Image corpo = tk.getImage("corpo.gif");
Image sapos = tk.getImage("sapo.gif");
g.drawImage(fundo,0,0,this);
g.drawImage(corpo,corpoPosicao.x,corpoPosicao.y,this);
for(int i=0; i < pontos.length; i++)
g.drawImage(sapos,pontos[i].x,pontos[i].y,this);
}
}
// ----- FRAME ----- //
class GameFrame extends JFrame{
public GameFrame() {
setTitle(“GAME”);
setSize(400,400);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) { System.exit(0); }
});
Container painel = getContentPane();
painel.add(new GamePainel());
}
}
// ----- MAIN ----- //
public class Game {
public static void main(String[] args) {
JFrame frame = new GameFrame();
frame.show();
}
}