Estava criando um metodo para verificar colisões. Eu desenho retangulos na tela e os movimento. Se eles se chocarem então uma mensagem deve ser impressa! Mas esta acontecendo uma coisa que eu nunca vi e não sei o porque disto!
Abaixo tem uma imagem de como eles aparecem inicialmente:
[img]http://i01.hyperfotos.com.br/img/2009/07/30/19/850978.jpg[/img]
Abaixo mostra uma imagem de como fica a imagem na tela quando eu movimento eles na tela:
[img]http://i01.hyperfotos.com.br/img/2009/07/30/19/850976.jpg[/img]
Fica assim um tempo depois os rastros desaparecem!!! E quando eu movimento de novo os rastros reaparecem!!!!
Segue a classe que desenha eles:
class MovimentaRetangulo extends JPanel implements Runnable {
Rectangle a;
Rectangle b;
public MovimentaRetangulo(){
a = new Rectangle(15,15,60,30);
b = new Rectangle(300,230,60,30);
}
public void paintComponent(Graphics g){
//g.setColor(Color.red);
g.fillRect(a.x,a.y,60,30);
//g.setColor(Color.blue);
g.drawRect(b.x,b.y,60,30);
super.repaint();
}
public void movRecA(int direcao){
if(direcao == 0){
a.x = a.x - 4;
}
if(direcao == 1){
a.x = a.x + 4;
}
if(direcao == 2 ){
a.y = a.y - 4;
}
if(direcao == 3){
a.y = a.y + 4;
}
}
public void movRecB(int direcao){
if(direcao == 0){
b.x = b.x - 4;
}
if(direcao == 1){
b.x = b.x + 4;
}
if(direcao == 2 ){
b.y = b.y + 4;
}
if(direcao == 3){
b.y = b.y - 4;
}
}
public void run(){
if((b.x <= (a.x+a.width)) && (a.x <= (b.x+b.width)) && (b.y <= (a.y+a.height)) && (a.y <= (b.y+b.height)) )
System.out.println("Houve colisão!!!");
//if( a.intersects(b) )
// System.out.println("Houve colisão!!!");
}
}
Já experimentei retirar o implements Runnable, mas da no mesmo, fiz isso achando que o Thread tava deixando o programa lento.
Mais uma coisinha, o método run não esta sendo acessado!!! Porque quando as imagens se sobrepõem a mensagem não é impressa, ai pensei que a formula que dedusi estava errada, então coloquei o metodo intersects do java para garantir mas quando as imagens se sobrepõem nem a msg do intersects é exibida! Então chego a conclusão de que o metodo run não esta sendo acessado
Segue o metodo main aonde anexo a Jpanel num Jframe e crio o Thread:
class Main {
public static void main(String[] args) {
MovimentaRetangulo mov = new MovimentaRetangulo();
TrataTeclado teclado = new TrataTeclado(mov);
Thread thread = new Thread(mov);
JanelaPrincipal janela = new JanelaPrincipal(mov, teclado);
thread.start();
}
}
E a classe JanelaPrincipal:
public class JanelaPrincipal extends JFrame {
public JanelaPrincipal(MovimentaRetangulo mov, TrataTeclado teclado){
super.setSize(new Dimension(2000, 2000));
super.setLocation(0,0);
super.setFocusable(true);
super.requestFocus();
super.setVisible(true);
super.add(mov);
super.addKeyListener(teclado);
}
}
Também experimentei tirar o metodo repaint e coloca-lo dentro do movRecA e movRecB mas os rastros continuam aparecendo e depois de um tempo eles desaparecem e apaenas ficam os retangulos....
Obrigado pela ajuda!