Detecção de colisão de corda 2D


13

Estou querendo criar uma corda que possa colidir com objetos como no seguinte vídeo do youtube:

Corda da física do jogo 2D

Eu estou pensando que você implementa a integração de verlet que usa pontos e conecta esses pontos com linhas. Estou tentando descobrir que tipo de detecção de colisão você aplicaria à corda para obter o efeito no vídeo.

Eu estou pensando que você teria que fazer algum cd para cada ponto. Eu gostaria de usar o box2D, por isso estou pensando em tornar cada ponto um corpo rígido? Qualquer conselho seria apreciado.


1
Se você assistir com cuidado o vídeo no seu link, fica claro que a "corda" que está sendo simulada é na verdade uma cadeia, ou seja, um grande número de segmentos inflexíveis conectados em uma linha, em vez de uma primitiva continuamente flexível. Isso é mais óbvio quando a corda envolve o pequeno obstáculo redondo; você pode ver os cantos girando em torno dele. Uma corrente é muito, muito mais fácil de simular do que uma corda contínua; cada link é apenas uma primitiva de colisão e eles são permanentemente anexados um ao outro. Para um comportamento mais convincente, torne cada link uma mola muito rígida, em vez de totalmente inflexível.
Paul Z

Respostas:


6

Como você está usando o Box2D, você pode criar uma série de retângulos e usar as juntas do Box2D para juntá-las. Lá você tem sua corda.

Para evitar cantos saindo de uma corda dobrada, posso imaginar duas opções:

  1. Dê a seus segmentos de corda pontas arredondadas (para que não sejam mais retângulos)
  2. Torne esta corda invisível e use-a apenas para a física. Tome as posições das articulações em cada quadro e usar isso para desenhar uma corda na mosca que o jogador irá ver.

Aviso: nunca tentei fazer isso sozinho, mas não vejo como uma série de retângulos unidos pode falhar quando o vídeo que você postou exibe praticamente a mesma coisa disfarçada.

Edit: Acabei de ver PaulZ e percebi a mesma coisa. Vá ler o comentário dele sobre a questão também.


2

Um rápido Google jogou isso aqui em cima . Uma demonstração, descrição e código (em Flash) usando o Box2D para implementar uma corda simples. A corda colide consigo mesma e com o bloco no topo da cena.


0

Aqui está o que eu faria, tornasse cada ponto da linha um círculo, fiz pontos suficientes para que os círculos se sobreponham. Amarre cada ponto ao seu vizinho, em vez de colisão padrão, esse vínculo deve fazer com que os pontos fiquem a uma distância fixa um do outro.

Não conheço o Box2D, mas acho que a funcionalidade necessária está lá.


0

Originalmente, o Box2D tinha uma demonstração de ponte de corda feita de caixas finas unidas com restrições ponto a ponto; esse seria um bom lugar para começar (não sei se ele ainda é fornecido com essa demonstração, mas seria fácil recriar).

É fácil implementar a corda como partículas com restrições de distância, independentemente de um simulador de corpo rígido (como você mencionou, usando um esquema de integração e solução de restrições Verlet como o descrito neste artigo: http://www.gamasutra.com/resource_guide/ 20030121 / jacobson_pfv.htm ), mas se você deseja que corpos rígidos reajam à sua corda (como no vídeo, com a caixa pendente), fica muito mais complicado. Eu começaria com um conjunto abrangente de ferramentas como o Box2D e trabalharia para trás, em vez de tentar construir a partir de partículas.


0

Lembro-me deste jogo Allegro: Cupido , do SpeedHack 2002. Ele contém uma implementação para cordas que colidem com o cenário. Consulte as classes PhysParticles e HeartTrails no arquivo heart_tails.cpp em seu código-fonte .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.