Box2d 主体,保存 b2BodyDef、b2Shape 和 b2FixtureDef

问题描述 投票:0回答:1

要创建并初始化

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 文档中没有看到任何关于此的建议.

c++ pointers scope box2d
1个回答
1
投票

Box2D 概述、工厂和定义:

工厂不保留对定义的引用。因此,您可以在堆栈上创建定义并将它们保存在临时资源中。

© www.soinside.com 2019 - 2024. All rights reserved.