Isto é uma pré-visualização de um tema em Hitskin.com
Instalar o tema • Voltar para a ficha do tema
[Java]Sistema de colisão para games 2D
Página 1 de 1
[Java]Sistema de colisão para games 2D
Tipo: Tutorial
Nível: Intermediário.
Linguagem: java.
Contato e mais informações: : https://lucasindiesh1p.wordpress.com/
Mais tutorais sobre:https://lucasindiesh1p.wordpress.com/2019/05/20/javasistema-de-colisao-para-games-2d/
Para fazer sistemas de colisões é necessário definir ou obter a coordenada x, coordenada y, altura e largura do alvo e então programar dentro do loop do seu game para verificar constantemente se esses atributos do alvo estão ou não iguais as variáveis do objeto que ira colidir . Por isso, é necessário utilizar condições nesse caso, e pode ser, também, útil criar métodos “get” para pegar o valor de cada uma das variáveis acima citadas. Isso vai depender do que preferir.
No java há a classe Rectangle e seu metodo intersects para fazer essa condição comparativa de forma fácil, de forma que bastará colcoar apenas os dois retangulos como parâmetros ao chamar o método)
https://docs.oracle.com/javase/7/docs/api/java/awt/Rectangle.html#intersects(java.awt.Rectangle)
Para isso, cria-se um retângulo para cada objeto do seu game, e atribui parametros (coordenadas x, y, altura e largura),dos retangulos criados, identicos aos dos objetos, e então, dentro do loop do seu game é só colocar o método intersect para ficar constanteente sendo chamado e checando quando ouve a interseção dos retangulos, quando houver, significa que houve colisão.
Outra alternativa é utiizar apenas condições e variáveis dos objetos (sem a criação de retângulos), por exemplo:
No caso acima o programador já tinha os dados de todas as coordenadas possíveis e ele apenas colocou todas elas numa condição. No caso, ele só precisava colidir objetos de maneira horizontal, por isso só utilizou apenas a coordenada x (variavel que ele criou chamada “projetil_x”). E não precisou da y e da altura e largura, mas caso precisasse, teria que saber ou descobrir cada valor possivel de colisão para atribuir as coordenadas y, já que não está utilizando o método intersects da classe Rectangle.
Sabendo o poto inicial do objeto colisor e seu trajeto, é possivel descobrir todas as coordenadas possiveis para a colisão, simplesmente deixando o programa rodar sem o sistema de colisão ainda implementado e observar em que momento(em quais coordenadas) os dois objetos se sobrepõe.
Uma maneira de descobrir as coordenadas e quando elas vão colidir é implementar temporariamente no seu game que ele as exiba.(Como? simples, desenhando na tela com o drawString, dentro do método do seu game responsável por desenha-lo [paint ou paintComponent]) então anota-se as coordenadas do projetil, por exemplo, quando ele chegar em cima do alvo
Por exemplo: (vai ficar exibindo todas as coordenadas na tela):
Nível: Intermediário.
Linguagem: java.
Contato e mais informações: : https://lucasindiesh1p.wordpress.com/
Mais tutorais sobre:https://lucasindiesh1p.wordpress.com/2019/05/20/javasistema-de-colisao-para-games-2d/
Para fazer sistemas de colisões é necessário definir ou obter a coordenada x, coordenada y, altura e largura do alvo e então programar dentro do loop do seu game para verificar constantemente se esses atributos do alvo estão ou não iguais as variáveis do objeto que ira colidir . Por isso, é necessário utilizar condições nesse caso, e pode ser, também, útil criar métodos “get” para pegar o valor de cada uma das variáveis acima citadas. Isso vai depender do que preferir.
No java há a classe Rectangle e seu metodo intersects para fazer essa condição comparativa de forma fácil, de forma que bastará colcoar apenas os dois retangulos como parâmetros ao chamar o método)
https://docs.oracle.com/javase/7/docs/api/java/awt/Rectangle.html#intersects(java.awt.Rectangle)
Para isso, cria-se um retângulo para cada objeto do seu game, e atribui parametros (coordenadas x, y, altura e largura),dos retangulos criados, identicos aos dos objetos, e então, dentro do loop do seu game é só colocar o método intersect para ficar constanteente sendo chamado e checando quando ouve a interseção dos retangulos, quando houver, significa que houve colisão.
Outra alternativa é utiizar apenas condições e variáveis dos objetos (sem a criação de retângulos), por exemplo:
- Código:
if(this.projetil_y == 50 && (this.projetil_x == 162|| this.projetil_x == 166 || this.projetil_x == 170 || this.projetil_x == 174 || this.projetil_x == 178 || this.projetil_x == 182 || this.projetil_x == 186 || this.projetil_x == 190 || this.projetil_x == 194 || this.projetil_x == 198|| this.projetil_x == 202)){
// colidiu! implementação do que acontece se colidir vem aqui.
}
No caso acima o programador já tinha os dados de todas as coordenadas possíveis e ele apenas colocou todas elas numa condição. No caso, ele só precisava colidir objetos de maneira horizontal, por isso só utilizou apenas a coordenada x (variavel que ele criou chamada “projetil_x”). E não precisou da y e da altura e largura, mas caso precisasse, teria que saber ou descobrir cada valor possivel de colisão para atribuir as coordenadas y, já que não está utilizando o método intersects da classe Rectangle.
Sabendo o poto inicial do objeto colisor e seu trajeto, é possivel descobrir todas as coordenadas possiveis para a colisão, simplesmente deixando o programa rodar sem o sistema de colisão ainda implementado e observar em que momento(em quais coordenadas) os dois objetos se sobrepõe.
Uma maneira de descobrir as coordenadas e quando elas vão colidir é implementar temporariamente no seu game que ele as exiba.(Como? simples, desenhando na tela com o drawString, dentro do método do seu game responsável por desenha-lo [paint ou paintComponent]) então anota-se as coordenadas do projetil, por exemplo, quando ele chegar em cima do alvo
Por exemplo: (vai ficar exibindo todas as coordenadas na tela):
- Código:
//Exibir coordenadas do projetil:
public void paintComponent(Graphics g) {
super.paintComponent(g);
//…
g.setColor(Color.white);
g.setFont(new Font(“Century Gothic”, Font.BOLD, 10));
g.drawString(“projetil_x:”+projetil_x, 0, 20);
g.drawString(“projetil_y:”+projetil_y, 0, 40);
}
CDZ- Novato
- Mensagens : 22
Créditos : 0
Tópicos semelhantes
» [Java]O esqueleto dos games 2d em java
» [Java]Sistema multiplayer offline
» [Java]Sistema de Salvar/Abrir dados em um game
» [Java]Opção e seleção de escolha de menu, para jogos 2D
» [engine]colisão de plataforma e colisão com bloco e plataforma-gm8
» [Java]Sistema multiplayer offline
» [Java]Sistema de Salvar/Abrir dados em um game
» [Java]Opção e seleção de escolha de menu, para jogos 2D
» [engine]colisão de plataforma e colisão com bloco e plataforma-gm8
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos