2013-04-15 2 views
0

Я только называл тело-> CreateFixture (& fixtureDef) один раз, но Testbed продолжает создавать тела. Вот мой код:Как я могу создать Box2D только один экземпляр тела?

#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 скриншоты обучающей программы показывают только один экземпляр созданного прибора. Я что-то упустил?

ответ

2

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

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

Смежные вопросы