Los cuerpos de movimiento rápido se pierden la colisión a veces en Box2d, AndEngine

StackOverflow https://stackoverflow.com/questions/8307837

  •  25-10-2019
  •  | 
  •  

Pregunta

Tengo un cuerpo de movimiento rápido (a) que es dinámico. Se supone que choca con otro cuerpo (b). A choca con B, pero a veces pasa el cuerpo B sin colisión. Este es un comportamiento totalmente aleatorio. Debo tener esa colisión. Amablemente guíe por qué actúa así, al azar.

¿Fue útil?

Solución

Se llama el efecto de un objeto que pasa por otro debido a un gran movimiento en un solo paso de tiempo túnel.

Box2d utiliza la detección continua de colisiones entre dinámico y estático objetos para resolver este problema. Sin embargo, su caso (Dynamic vs Dynamic) no se maneja automáticamente, por lo que es solo un lanzamiento de dados aleatorios si sus objetos están en posiciones colisionadas en el momento exacto en que se evalúan las colisiones.

Desde el Box2d Manual:

Normalmente CCD no se usa entre cuerpos dinámicos. Esto se hace para mantener razonable el rendimiento. En algunos escenarios de juego, necesitas cuerpos dinámicos para usar CCD. Por ejemplo, es posible que desee disparar una bala de alta velocidad en una pila de ladrillos dinámicos. Sin CCD, la bala podría túnel a través de los ladrillos.

Los objetos de movimiento rápido en Box2d se pueden etiquetar como balas. Las balas realizarán CCD con cuerpos estáticos y dinámicos. Debes decidir qué cuerpos deben ser balas en función del diseño de tu juego. Si decide que un cuerpo debe tratarse como una bala, use la siguiente configuración.

BodyDef.Bullet = True;

La bandera de la bala solo afecta los cuerpos dinámicos.

Box2d realiza una colisión continua secuencialmente, por lo que las balas pueden perder los cuerpos de movimiento rápido.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top