b2Shape等于0xCDCDCDCD并在Create Fixture上引发异常

时间:2018-12-18 19:39:03

标签: c++ box2d

我正在按照http://box2d.org/manual.pdf上的手册进行操作,以尝试更好地理解Box2D的工作原理,但是遇到了问题。当我打电话 m_body-> CreateFixture,当它尝试访问fixtureDef-> shape时会抛出异常,因为fixtureDef-> shape为0xCDCDCDCD。我很困惑,因为我仍在学习Box2D,如果有人可以帮助解释,我会喜欢的。

以下是一些可从PhysicsEngine.h了解的重要代码:

if privacy_policy_link.match(%r{^(http[s]?://|)(www.)?#{domain}($|/$)})

以下是PhysicsEngine.cpp中的一些重要信息:

class PhysicsGround{
private:
    b2Body* m_body;
    b2Fixture* m_fixture;
    b2PolygonShape m_shape;

public:
    void init(glm::vec2 pos, glm::vec2 size, b2World* world);

    b2Body* getBody();
    void setBody(b2Body* body);

    b2Fixture* getFixture();
};

class PhysicsEngine
{
private:
    ICMEM::StackAllocator m_stackAlloc;

    std::vector<PhysicsSprite*> m_physObjs;

    b2World* m_world;
    b2Vec2 m_gravity;

public:
    PhysicsEngine() {}
    void init(float gravX, float gravY);
    void shutDown();

    void addPhysicsObject(PhysicsSprite* sprite);
    void addGround(glm::vec2 pos, glm::vec2 size);
    void setGravity(float gravX, float gravY);
    void update(double dt);

    b2World* getWorld() { return m_world; }
};

1 个答案:

答案 0 :(得分:1)

您的对象中有未初始化的值。这会在非调试版本中创建随机值,在这种情况下,模式0xCDCDCDCD是这些未初始化值的典型Visual Studio调试值。

您可能想使用C ++ 11初始化功能,因为您没有提供自定义构造函数。例如:

class PhysicsGround{
private:
    b2Body* m_body{nullptr};
    b2Fixture* m_fixture{nullptr};
    b2PolygonShape m_shape;
//
};