Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

jadsonlucena

Detecção de colisão eficiente

Recommended Posts

Galera, estou tentando fazer um sistema de colisões eficiente no canvas com javascript.

 

A forma mais básica seria adicionar todos os objetos em uma lista e sempre que o personagem se movesse, a lista seria varrida comparando a posição de cada objeto com a do personagem, levando em conta o espaço que os dois ocupam. Se algum objeto da lista se intersectar com o personagem, o tratamento de colisão seria realizado.

 

Mas percebemos que se tivermos um grande número de objetos no cenário. Este não seria uma forma inteligente de se fazer a coisa. Pois a busca de todos os objetos da lista incluindo a comparação realizada seriam muito custos.

 

Eu gostaria de verificar sempre se à um outro elemento na área do personagem sem ter que varrer todos os elementos da tela. Algo semelhante ao onmouseover, mas para elementos.

 

Alguém conheceria alguma (se possível, a melhor) forma de se fazer isso?

 

Grato desde já....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tá usando alguma engine de Jogos? ou tá fazendo tudo do zero?

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por BrunoHSL
      Galera, estou fazendo um jogo e estou pegando de exemplo um código que vi na internet, e adaptando no meu conforme as necessidades, quando chegou na colisão ( a ultima parte do meu jogo já) estou com um problema, eu simplesmente nao consigo colocar ele no meu codigo pois da erro no if Gameover, gostaria que me explicassem o que acontece nessa parte do código para que eu possa adaptar ele em meu jogo
      function Sprite(caminhoDaImagem, xInicial, yInicial) { //restante do código... this.colidiu = function(outro){ var colidiuNoXTopo = outro.x >= this.x && outro.x <= (this.x + this.largura); var colidiuNoYTopo = outro.y >= this.y && outro.y <= (this.y + this.altura); var colidiuNoXBase = (outro.x + outro.largura) >= this.x && (outro.x + + outro.largura) <= (this.x + this.largura); var colidiuNoYBase = (outro.y + outro.altura) >= this.y && (outro.y + outro.altura) <= (this.y + this.altura); return (colidiuNoXTopo && colidiuNoYTopo) || (colidiuNoXBase && colidiuNoYBase); } } Desde já, muito obrigado 
    • Por igorsk89
      Não estou conseguindo fazer com que o "enemy", que no caso é o asteroide, colida com a nave e a mesma executar a função de destruir..
      Alguém tem alguma ideia do que está dando errado?? Se está faltando algo, etc?!
      Screenshots:


    • Por Pablo Goulart Nogueira
      Esse é o código que eu fiz para testar a detecção da colisão, mas a janela fecha antes de eu poder ve se está funcionando.
       
      if (personagem.x + personagem.bx > blocos.x - blocos.bx &&
      personagem.x - personagem.bx < blocos.x + blocos.bx && personagem.y + personagem.by > blocos.y - blocos.by && personagem.y - personagem.by < blocos.y + blocos.by ) { return 1; } else return 0;
    • Por jadsonlucena
      Galera, estou tentando fazer um sistema de colisões eficiente no canvas com javascript.



      A forma mais básica seria adicionar todos os objetos em uma lista e sempre que o personagem se movesse, a lista seria varrida comparando a posição de cada objeto com a do personagem, levando em conta o espaço que os dois ocupam. Se algum objeto da lista se intersectar com o personagem, o tratamento de colisão seria realizado.



      Mas percebemos que se tivermos um grande número de objetos no cenário. Este não seria uma forma inteligente de se fazer a coisa. Pois a busca de todos os objetos da lista incluindo a comparação realizada seriam muito custos.



      Eu gostaria de verificar sempre se à um outro elemento na área do personagem sem ter que varrer todos os elementos da tela. Algo semelhante ao onmouseover, mas para elementos.



      Alguém conheceria alguma (se possível, a melhor) forma de se fazer isso?



      Grato desde já....

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.