Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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á....
A forma básica é a única que você pode fazer, e também tem outra que levaria muito trabalho...
Procurem por árvores K-D trees ou BSP.
Aqui está um bom material que lista em seu conteúdo muitas solução: http://docslide.com.br/documents/algoritmos-para-deteccao-de-colisoes-em-ambientes-graficos-bidimensionais.html
Grato a todos...
ola, recomendo esse canal do youtube,
Tem bastante coisas, da pra esclarecer varias duvidas de colisões etc.
Você pode usar a forma básica para checar se há colisão entre os objetos que estão sendo vistos na tela. Os objetos vistos na tela podem, sugeridamente, estar em uma lista (array), que vai sendo modificada ao mesmo tempo que o jogo é renderizado, com base nas condições e na estrutura. Os objetos que não são vistos na tela deveriam permanecer em uma lista (array) onde há objetos não vistos na tela (no caso de estarem na lista de objetos visíveis na tela são removidos de lá).
Quando um objeto está visível na tela é porque sua metade pode estar sendo vista em algum local, com base em seu tamanho;
Checando horizontalmente:
**** (Objeto > X) maior que (Objeto > Largura (negativo -))*
**** &*
**** (Objeto > X) menor que (Área > Largura)*
Eu preciso muito da ajuda de você's.
Só precisa ser a ideia ou o nome de algum algorítimo...