Как заставить Box2D создать только один экземпляр тела?

Я только один раз вызвал body->CreateFixture(&fixtureDef), но испытательный стенд продолжает создавать тела. Вот мой код:

#ifndef FOOTEST_H
#define FOOTEST_H
#define DEGTORAD 0.0174532925199432957f
#define RADTODEG 57.295779513082320876f    

class FooTest : public Test
    {
        public:
        FooTest() { } //do nothing, no scene yet

        void Step(Settings* settings)
        {
            //run the default physics and rendering
            Test::Step(settings);

        b2BodyDef myBodyDef;
        myBodyDef.type = b2_dynamicBody;
        myBodyDef.position.Set(0, 20);
        b2Body *dynamicBody = m_world->CreateBody(&myBodyDef);

        b2PolygonShape polygonShape;
        b2FixtureDef myFixtureDef;
        myFixtureDef.shape = &polygonShape;
        myFixtureDef.density = 1;

        for(int i=0;i<4;i++){
        b2Vec2 pos(sinf(i*90*DEGTORAD), cos(i*90*DEGTORAD));
        polygonShape.SetAsBox(1, 1, pos, 0);
        dynamicBody->CreateFixture(&myFixtureDef);
        }


        myBodyDef.type = b2_staticBody;
        myBodyDef.position.Set(0, 0);

        b2Body *staticBody = m_world->CreateBody(&myBodyDef);

        b2EdgeShape edgeShape;
        edgeShape.Set( b2Vec2(-15,0), b2Vec2(15,3) );

        myFixtureDef.shape = &edgeShape;
        staticBody->CreateFixture(&myFixtureDef);
        }

        static Test* Create()
        {
            return new FooTest;
        }
    };  
#endif

Я следовал этому руководству: iForce2D На снимках экрана учебника показан только один экземпляр созданного приспособления. Я что-то упустил здесь?


person Jack Sparser    schedule 15.04.2013    source источник


Ответы (1)


«Тестовый стенд» неоднократно вызывает Step, и вы создаете экземпляры при каждом вызове.
Обратите внимание, что все настройки в учебнике выполняются в конструкторе FooTest, поэтому он запускается только один раз.

По какой-то причине вы переместили настройку из конструктора в функцию Step.
Чуть раньше в этом руководстве сказано: «Если вы не делаете ничего особенного для рендеринга или управления физикой, вам не нужно переопределить шаг()".

person molbdnilo    schedule 15.04.2013