Pessoal, estou fazendo um joguinho simples do bomberman.
O motivo é simplesmente para testar colisão, mas estou tendo problemas nesse assunto.
A função de colisão está apenas retornando false, que no caso, o personagem não faz movimento nenhum.
Segue a classe com a função de colisão que eu criei:
[code]public final class PanelLinhas extends javax.swing.JPanel {
Point2D posicao, posicaoPersonagem;
//matriz que representa o campo de jogo
int campo[][] = new int[10][10];
int bx = 0, by = 0;
int qtd = 10;
String path = "C:/Users/Luiz/Documents/NetBeansProjects/Linhas/";
public boolean cima = false, baixo = false, esquerda = false, direita = false, espaco = false;
public boolean colisao(double xp, double yp) {
int i, j;
int xinicial, xfinal, yinicial, yfinal;
for (i = 0; i < qtd; i++) {
for (j = 0; j < qtd; j++) {
if (campo[i][j] == 1) {
xinicial = i * 80; //800x600 dividido por 10, equivale ao tamanho de cada quadrado da matriz
yinicial = j * 60;
xfinal = xinicial + 80;
yfinal = yinicial + 60;
if ((xinicial < xp + 5 && xfinal > xp + 5) || (xinicial < xp - 5 && xfinal > xp - 5)) {
if ((yinicial < yp + 5 && yfinal > yp + 5) || (yinicial < yp - 5 && yfinal > yp - 5)) {
return false;
}
}
}
}
}
return true;
}
public void preencheMatriz() {
int i, j;
for (i = 0; i < qtd; i++) {
for (j = 0; j < qtd; j++) {
if (i == 0 || i == 9 || j == 0 || j == 9) {
campo[i][j] = 1;
} else {
campo[i][j] = 0;
}
}
}
campo[5][5] = 1;
}
public PanelLinhas() {
initComponents();
preencheMatriz();
posicao = new Point2D.Double(0, 0);
this.setSize(super.getSize());
posicaoPersonagem = new Point2D.Double(95, 60);
}
@Override
public void paintComponent(Graphics g) {
BufferedImage bi = (BufferedImage) createImage(super.getWidth(), super.getHeight()); //bufferedImage usa double buffering
Graphics2D desenho = bi.createGraphics();
double x = posicaoPersonagem.getX();
double y = posicaoPersonagem.getY();
Toolkit tk = this.getToolkit();
int i, j;
double largura = super.getWidth() / qtd;
double altura = super.getHeight() / qtd;
for (i = 0; i < qtd; i++) {
for (j = 0; j < qtd; j++) {
//desenho.drawRect((int) (i * largura), (int)(j*altura), (int) largura, (int)altura);
if (campo[i][j] == 0) {
desenho.drawImage(tk.getImage(path+"grama.jpg"), (int) (i * largura), (int) (j * altura), (int) largura, (int) altura, this);
} else {
desenho.drawImage(tk.getImage(path+"tijolo.jpg"), (int) (i * largura), (int) (j * altura), (int) largura, (int) altura, this);
}
}
}
if (espaco) {
bx = (int) posicaoPersonagem.getX();
by = (int) posicaoPersonagem.getY();
}
if (cima) {
if(colisao(x,y)){
System.out.println(colisao(posicaoPersonagem.getX(),posicaoPersonagem.getY()));
y -= 5;
}System.out.println(colisao(posicaoPersonagem.getX(),posicaoPersonagem.getY()));
}
if (baixo) {
if(colisao(posicaoPersonagem.getX(),posicaoPersonagem.getY())){
System.out.println(colisao(posicaoPersonagem.getX(),posicaoPersonagem.getY()));
y += 5;
}System.out.println(colisao(posicaoPersonagem.getX(),posicaoPersonagem.getY()));
}
if (esquerda) {
if(colisao(posicaoPersonagem.getX(),posicaoPersonagem.getY())){
System.out.println(colisao(posicaoPersonagem.getX(),posicaoPersonagem.getY()));
x -= 5;
}System.out.println(colisao(posicaoPersonagem.getX(),posicaoPersonagem.getY()));
}
if (direita) {
if(colisao(posicaoPersonagem.getX(),posicaoPersonagem.getY())){
System.out.println(colisao(posicaoPersonagem.getX(),posicaoPersonagem.getY()));
x += 5;
}System.out.println(colisao(posicaoPersonagem.getX(),posicaoPersonagem.getY()));
}
if (bx != 0 && by != 0) {
desenho.drawImage(tk.getImage(path+"Bomb.png"), bx, by, this);
}
posicaoPersonagem.setLocation(x, y);
desenho.drawImage(tk.getImage(path+"bomberman.gif"),
(int) posicaoPersonagem.getX(), (int) posicaoPersonagem.getY(), this);
g.drawImage(bi, 0, 0, this);
}[/code]
na outra classe, eu defini o tamanho da tela:
public FrameLinhas() {
int bordaHoriz, bordaVert;
bordaHoriz = 16;
bordaVert = 38;
initComponents();
panelLinhas = new PanelLinhas(); //criei um JPanel
this.setSize(800 + bordaHoriz, 600 + bordaVert);
panelLinhas.setSize(this.getWidth() - bordaHoriz, this.getHeight() - bordaVert); //configurei o tamanho
this.add(panelLinhas); //adicionei o JPanel ao JFrame
}
Alguém pode me ajudar?
Grato