No Box2D, fiquei curioso para saber se é possível obter uma caixa delimitadora de um corpo já criado no mundo.
Então, basicamente, o Corpo é criado, está interagindo com o mundo e tal. E eu precisava da caixa delimitadora do Corpo. É possível?
No Box2D, os corpos não têm caixas delimitadoras associadas a eles, o equipamento possui. Então, você precisa iterar sobre todos os equipamentos e gerar um novo AABB. Algo assim:
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()
não existe, mas existefixture->GetAABB(int32 childIndex)
.O simples uso do acessório aabb também inclui o raio da forma - se você deseja obter o verdadeiro aabb sem o raio da forma, faça o seguinte:
fonte
shapeAABB.lowerBound = shapeAABB.lowerBound + r;
eshapeAABB.upperBound = shapeAABB.upperBound - r;
obter o comportamento que queria.Realmente, um loop for geralmente é melhor para iteração. Tomando a resposta de @noel:
A expressão
fixture
, tomada como booleana, é, eu entendo, equivalente afixture != NULL
.fonte
Isto é o que eu geralmente uso:
Onde este é algum nó pai. Eu até adicionei isso ao próprio nó (por exemplo, someNode) e isso também parece funcionar, apenas verifique se o seu z-index está alto o suficiente.
fonte