GameOver quando imagens estiverem na mesma posição

10 respostas
ViniciusSouza

Estou tentando colocar para que quando as posições x e y de duas imagens forem iguais,
apareça a msg de game over,

fiz o método seguinte:

public void gameOver(){

if (a==x && b==y){                  // onde a e b sao de uma imagem e x e y outra

JOptionPane.showMessageDialog(null, GAME OVER);

t.stop();

}

}

chamei o mesmo metodo no metodo de action performed…
i tb o chamei no main.

mas as imagens estao passando uma pela outra como se o metodo nao existisse,

Há alguma outra forma de eu colocar no metodo gameOver para que funcione???

Vlww

10 Respostas

HenriqueBR

Bom dia,

Dê mais informações sobre o problema, qual o tipo de a, b, x e y?

Já debugou o programa para ver se os valores são realmente iguais?

ViniciusSouza

a,b e x,y sao inteiroos …

tipo,
tenho uma imagem com a posição (a,b),
e tenho uma outra com a posição (x,y),
iniciadas em locais diferentes do frame… Dei movimento as duas imagens e gostaria que quando elas estivessem na mesma posição o jogo parasse, ou seja quando uma bater na outra… (tipo um GaveOver);

ViniGodoy

Você quer fazer um teste de colisão. Para isso, não basta apenas testar o x e y, mas também a altura e a largura da imagem.

A forma mais fácil de fazer um teste de colisão em Java é criar dois objetos do tipo Rectangle e testar se eles se interssecionam entre si:
Rectangle2D areaImg1 = new Rectangle2D.Double(a, b, img1.getWidth(null), img1.getHeigth(null));
Rectangle2D areaImg2 = new Rectangle2D.Double(x, y, img2.getWidth(null), img2.getHeigth(null));

if (areaImg1.intersects(areaImg2)) {
   //houve colisão
}
ViniciusSouza

Blz,
eu tinha feito dois objetos de ImageIcon e carreguei cada um em um Label,
teria como eu atribuir esse label ao “rectangle”?

Pq se nao tiver como será uma boa parte de meu codigoo embora,
pois jah fiz muita cooisa utilizando os labels.
Como movimentos, eventos, etc…

ViniGodoy

Com JLabel é mais fácil ainda. Basta chamar o getBounds() que já te retorna o retângulo direto.

if (label1.getBounds().intersects(label2.getBounds())) { //colidiu }

Apesar de que para jogos foi péssimo você ter usado os componentes do Swing. O ideal seria você ter desenhado usando Java 2D. Além de ocupar consideravelmente menos memória, é possível otimizar mais o o jogo e obter uma animação muito mais suave.

Marky.Vasconcelos

Para aprender mais de Java2D voce pode ver os artigos desse link:
http://www.pontov.com.br/site/index.php/java/48-java2d

ViniciusSouza

Isso com certeza vai servir,
vou colocar no codigo, e sei que era somente isso que estava faltando,
vou estudar mais sobre o 2d,

eh que esse periodo o prof tah dando swing, e ele quer que ultilize apenas o swing --’…

valeu pela ajuda amigoo, =D

ViniciusSouza

kkkkkkkkkkkkkkk

Coloquei,
mas agora quando rodo, ele jah abre direto a msg de game over e dá um Stop…
Como se ele tivesse considerando q as imagens jah estao se interseptando.

masnao era pra tah assim, pq as posições das imagens sao totalmente diferentes inicialmente…

if(tubarao.getBounds().intersects(personagem.getBounds())){ JOptionPane.showMessageDialog(null, "GAME OVER"); t.stop(); }

ViniGodoy

Melhor depurar.

Marky.Vasconcelos

Como voce esta movendo elas pelo JPanel?

setBounds?

Esse não é o caminho certo para um jogo, faça como o ViniGodoy disse, desenhe com Java2D.

Criado 20 de maio de 2010
Ultima resposta 21 de mai. de 2010
Respostas 10
Participantes 4