要创建并初始化
b2Body
,我们需要创建 b2BodyDef
、b2Shape
和 b2FixtureDef
,并将这些值作为函数指针传递。
所以我可以有一个像这样的
createBody
功能:
b2Body* createBody(b2World& world, b2Vec size, float density, float friction)
{
b2BodyDef bodyDef;
bodyDef.type = b2_dynamicBody;
b2Body* body = world.CreateBody(&bodyDef);
b2PolygonShape shape;
shape.setAsBox(size.x, size.y);
b2FixtureDef fixtureDef;
fixtureDef.shape = &shape;
fixtureDef.density = density;
fixtureDef.friction = friction;
body->CreateFixture(&fixtureDef);
return body;
}
这是我的问题:
bodyDef
、shape
和fixtureDef
必须留在范围内吗?
如果不是,那么这个函数将是有效的,但似乎 Box2d 使用指向这些值的指针,所以如果它们超出范围,那么程序就会开始出现问题。
我似乎有一些代码使用了类似的函数,例如 this one,它有一个函数
createBox
,其工作原理与我介绍的函数一样,而且我在 Box2d 文档中没有看到任何关于此的建议.
工厂不保留对定义的引用。因此,您可以在堆栈上创建定义并将它们保存在临时资源中。