En Box2D, tenía curiosidad por saber si es posible obtener una caja delimitadora de un cuerpo ya creado en el mundo.
Básicamente, el Cuerpo se crea, está interactuando con el mundo y demás. Y necesitaba la caja de límite de ese cuerpo. ¿Es posible?
En Box2D, los cuerpos no tienen cuadros delimitadores asociados con ellos, el accesorio sí. Por lo tanto, debe iterar sobre todos los accesorios y generar un nuevo AABB. Algo como esto:
b2AABB aabb;
aabb.lowerBound = b2Vec2(FLT_MAX,FLT_MAX);
aabb.upperBound = b2Vec2(-FLT_MAX,-FLT_MAX);
b2Fixture* fixture = body->GetFixtureList();
while (fixture != NULL)
{
aabb.Combine(aabb, fixture->GetAABB());
fixture = fixture->GetNext();
}
fixture->GetAABB()
no existe, perofixture->GetAABB(int32 childIndex)
sí.simplemente usar el dispositivo aabb también incluye el radio de la forma; si desea obtener el aabb real sin el radio de la forma, hágalo así:
fuente
shapeAABB.lowerBound = shapeAABB.lowerBound + r;
yshapeAABB.upperBound = shapeAABB.upperBound - r;
obtener el comportamiento que quería.Realmente, un bucle for suele ser mejor para la iteración. Tomando la respuesta de @noel:
La expresión
fixture
, tomada como booleana, es, entiendo, equivalente afixture != NULL
.fuente
Esto es lo que generalmente uso:
Donde este es un nodo padre. Incluso he agregado esto al nodo en sí (por ejemplo, someNode) y eso también parece funcionar, solo asegúrese de que su índice z sea lo suficientemente alto.
fuente