Недавно реализована основная ветка (не удалось получить выпуск 2.3.1 для CMake) Box2D в проект для быстрой 2D-физики и обнаружения столкновений. Все работает нормально, но когда я пришел к использованию функции "World.GetBodyList ()", она вернула NULL. Это кажется странным, потому что я знаю, что мир правильно обновляет 2 тестовых объекта, которые я создал, поскольку объект Dynami c падает на объект stati c и балансирует сверху.
У меня есть только 1 мировой объект, и это статический c указатель.
private:
inline static b2World* s_world;
World Init
void Box2DWrapper::Box2DInit(glm::vec2 gravity)
{
b2Vec2 gravityVec = { gravity.x, gravity.y };
s_world = new b2World(gravityVec);
}
Как создаются тела.
b2Body* Box2DWrapper::CreateRigidbodyBox(glm::vec2 position, glm::vec2 halfDimensions, bool isStatic, float objectDensity, float frictionCoefficient, float restitution, int16_t collisionGroup, Layers myCategories, Layers collisionCategories, bool fixedRotation, float angularDampening, float linearDampening, bool fastDynamicBulletCollisionCheck)
{
b2BodyDef newBodyDef;
newBodyDef.position = { position.x, position.y };
newBodyDef.angularDamping = angularDampening;
newBodyDef.linearDamping = linearDampening;
newBodyDef.fixedRotation = fixedRotation;
newBodyDef.bullet = fastDynamicBulletCollisionCheck;
if (!isStatic)
newBodyDef.type = b2_dynamicBody;
b2Body* boxBody = s_world->CreateBody(&newBodyDef);
b2PolygonShape box;
box.SetAsBox(halfDimensions.x, halfDimensions.y);
b2FixtureDef boxDef;
boxDef.shape = &box;
boxDef.density = objectDensity;
boxDef.friction = frictionCoefficient;
boxDef.restitution = restitution;
boxDef.filter.groupIndex = collisionGroup;
boxDef.filter.categoryBits = static_cast<uint16_t>(myCategories);
boxDef.filter.maskBits = static_cast<uint16_t>(collisionCategories);
boxBody->CreateFixture(&boxDef);
return boxBody;
}
Это возвращает nullptr.
b2Body* current = s_world->GetBodyList();
Не уверен, что это вся соответствующая информация, так как я не очень разбираюсь в Box2D. Скажите, пожалуйста, если чего-то не хватает.