Detectar colisões Java2D  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
Naruffy
JavaEvangelist
[Avatar]

Membro desde: 28/03/2008 18:54:49
Mensagens: 324
Offline

Fla pessoal, blz?

To com uma seguinte dúvida, procurei bastante na internet e não achei mta coisa, estou fazendo um pequeno teste com Java2d para aprender um pouco de física para usar em games, no meu teste bolas ficam caindo e quicando no chão, paredes e umas nas outras, até a parte do chão e paredes está tranquilo, minha duvida está na hora de detectar colisões entre as bolinhas, eu fiz uma comparação na mão, "deu para tapar o buraco", mas queria algo mais elegante.

Queria saber se o Java2d tem recurso pronto para detectar colisões entre círculos, e se tiver como faz.

Aproveitando para deixar outra pergunta sobre o assunto.

Estou utilizando vetores para calcular os movimentos, alguem ai sabe como faço para calcular um vetor resultante de uma colisão entre esses vetores?

Agradeço desde já.

[]s
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Online

Veja a classe Elipse2D:
http://java.sun.com/j2se/1.4.2/docs/api/java/awt/geom/Ellipse2D.html

Ela possui o método para detectar colisão (intersectsWith).


Quanto ao resultante. Basta somar os dois vetores. Lindo, não?

This message was edited 1 time. Last update was at 08/04/2010 18:00:25


@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Online

Ah. Se quiser fazer a mão:

Pegue o vetor que representa a posição de cada bola (do centro da bola).
Subtraia um do outro.

Para haver colisão: O tamanho desse vetor (que representa distância entre as bolas) deve ser menor que a soma dos dois raios.
Para otimizar isso, basta fazer o tamanho ao quadrado ser menor que a soma dos raios ao quadrado (o que evita o calculo de raiz quadrada no tamanho).

This message was edited 1 time. Last update was at 08/04/2010 18:04:50


@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
loganwlogan
JavaTeenager
[Avatar]

Membro desde: 31/08/2004 00:17:26
Mensagens: 182
Offline

Olá amigos,
Eu tenho estudo um pouco sobre Java2D e uma das dúvidas que eu tinha era justamente sobre a colisão entre esferas, comecei estudo algumas dicas dadas nesse tópico e busquei mais algumas coisas na internet, pati do conceito geométrico de que duas bolas colidem quando a soma dos raios é igual ou menor que a distância dos centros dessas bolas, partindo desse princípio eu crie uma classe Bola e nela criei um método que calcula a distância entre o centro das duas bolas.


Depois criei um método que detecta a colisão


E na Thread do meu JPanel eu fiz da seguinte maneira



Sei que é um exemplo bem simplório e ainda precisa de muito trabalho em cima dele, mas achei legal compartilhar com os colegas
Abçs

Marcelo Logan
 Nome do arquivo ExperimentosBolas.jar [Disk] Download
 Descrição Jar do meu projeto
 Tamanho 101 Kbytes
 Baixado:  43 vez(es)

This message was edited 2 times. Last update was at 06/01/2011 16:10:40


"Quando você olhar dentro do abismo
O Abismo olhará dentro de você"
Guerras Infinitas
[WWW] [Yahoo!] [MSN]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Online

Logan, vai ficar ainda mais elegante se você usar vetores para representar seus pontos. A classe Vector2D poderia substituir tranquilamente a sua classe PontoMedio (ou Ponto).

Dá uma lida:
O uso de vetores nos jogos

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
loganwlogan
JavaTeenager
[Avatar]

Membro desde: 31/08/2004 00:17:26
Mensagens: 182
Offline

Valeu pela dica ViniGodoy,


Já dei uma lida, agora vou tentar trocar a Classe PontoMedio pela Vector2D. Fiz uns testes e o meu programa não fuinciona em todos os casos, se eu mudar a velocidade de uma das bolas da erro, mas vou continuar meus estudos.

Abçs


Marcelo Logan

"Quando você olhar dentro do abismo
O Abismo olhará dentro de você"
Guerras Infinitas
[WWW] [Yahoo!] [MSN]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team