Gravidade e Colisão?  XML
Índice dos Fóruns » Interface Gráfica
Autor Mensagem
GustavoBorba
JavaChild

Membro desde: 23/11/2009 19:23:23
Mensagens: 110
Offline

Estou tentando criar um sistema de Gravidade e Colisão entre formas da classe Graphics e Graphics2D. Mas nem sei por onde começar!

As formas eu já sei criar, mas só não sei como implementar Física no projeto. Se alguém poder me ajudar, me dizer por onde começar já ficarei muito agradecido!

Cordialmente,
Gustavo Borba.
Naruffy
JavaEvangelist
[Avatar]

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

Olá GustavoBorba,

Você terá que utilizar conceitos de vetores para fazer isso, onde a gravidade terá um vetor, e o movimento das suas formas serçao representados por outros vetores.

recomendo vc ler o artigo sobre vetores do site www.pontov.com.br

[]s
sfohart
Thread.start()
[Avatar]

Membro desde: 21/12/2006 13:50:04
Mensagens: 39
Localização: Salvador, Bahia
Offline

Cara, eu não me lembro bem, mas sei que o pessoal do Indigente (Universidade Federal da Bahia) utilizava uma biblioteca C/C++ para a parte física da engine gráfica que eles estavam montando... Talvez tenha algo parecido pra java...

Leandro Soriano Ferreira
Analista de SIstemas
Bacharel em Ciência da Computação da UFBA
Sun Certified Programmer for Java 2 Platform 1.6
sfohart at gmail dot com
[WWW]
GustavoBorba
JavaChild

Membro desde: 23/11/2009 19:23:23
Mensagens: 110
Offline

Olá, Boa Tarde/Noite!

Eu até achei uma engine que implementa a física em Java2D, mas eu gostaria mesmo de saber por conta própria, assim eu adquiriria mais conhecimento e meu horizonte de possibilidades ficaria maior. Eu li sobre os vetores, mas não entendi como aplica-los ao meu problema. Se alguém puder me orientar ou algo parecido, ficarei grato.

Cordialmente,
Gustavo Borba.
dudaskank
GUJ Ranger
[Avatar]
Membro desde: 12/09/2003 14:59:26
Mensagens: 850
Localização: Suzano, SP, Brasil
Offline

Bem, o vetor aqui é usado para ter a velocidade e posição nos 2 eixos, x e y. você pode deixar como vetor ou separar em 2 atributos pra cada componente (velocidade x e velocidade y e posição x e y).

Gravidade nada mais é que uma força pra baixo... logo, se pra cima o y aumenta (considerando por exemplo que y=0 é o chão, y = 10 está em cima do chão vamos dizer assim), para simular a gravidade basta subtrair da velocidade y um valor constante em cada passo, até atingir uma velocidade máxima de queda livre. Aí, é só calcular a nova posição y daquele passo, que vai ser posicao y = posicao y (atual) + velocidade y.

Quando toca o chão (onde o y=0 por exemplo), é só "desligar" a força da gravidade e manter o y ali mesmo. Nessa hora, a velocidade y fica = 0. Assim a posição não é alterada.

Não sei se fui claro (acho que não rs) mas da pra ter umas idéias aqui: http://gamedesign.wikicomplete.info/gravity

Eduardo Oliveira

Toque a balada do amor inabalável, eterna love song de nós dois...

Página
[WWW]
GustavoBorba
JavaChild

Membro desde: 23/11/2009 19:23:23
Mensagens: 110
Offline

Então eu devo declarar um Vector2D com a posição de meu objeto e um Vector2D com a sua velocidade. Então os cálculos seriam (corrija-me se eu estiver errado:



E eu então devo usar a classe Rectangle, para detectar a colisão, se ela for detectada, então eu farei Vector2D.normalize() para normalizar o vetor de posição. E em um metódo de atualização como um:



E então no paint component... :



Não sei se estou correto, por favor me corrija se eu estiver errado, mas acho que é isso! Estou aguardando ansiosamente por sua resposta!

Cordialmente,
Gustavo Borba.
dudaskank
GUJ Ranger
[Avatar]
Membro desde: 12/09/2003 14:59:26
Mensagens: 850
Localização: Suzano, SP, Brasil
Offline

Bem, a primeira parte está correta, seu cálculo da velocidade e posição nova estão ok.

Agora, quanto ao tratamento da colisão, não entendi bem se é isso mesmo que você precisa. Quando se normaliza um vetor, ele fica na mesma direção mas de comprimento 1. (http://pt.wikipedia.org/wiki/Vetor_unit%C3%A1rio).

No tratamento de colisões, vai depender do que você vai querer fazer, então não posso dizer se está certo ou errado isso. Se for um jogo, por exemplo, e um dos Rectangle é uma parede e o outro seu personagem: você vai precisar fazer o personagem voltar alguns pontos para que ele não atravesse a parede (a não ser que seja um fantasma ;D).

Para o desenho da tela, sim este modo funciona, é chamado de modo passivo aliás... pode tentar também o modo ativo, que você encontra mais informações por aqui:

http://fivedots.coe.psu.ac.th/~ad/jg/index.html
http://fivedots.coe.psu.ac.th/~ad/jg/ch1/index.html

Eduardo Oliveira

Toque a balada do amor inabalável, eterna love song de nós dois...

Página
[WWW]
 
Índice dos Fóruns » Interface Gráfica
Ir para:   
Powered by JForum 2.1.8 © JForum Team