Шаг по времени не повторяется | Box2D

#c #box2d

Вопрос:

я возвращаюсь в box2d после многих лет отсутствия и думал начать с нуля. вдобавок ко всему, на этот раз решил поработать с версией C (в прошлом работал с версией Javascript).

По какой-то причине самая первая программа, описанная в box2d.org не работает должным образом. Когда я его компилирую, я не получаю никаких ошибок, однако результат неправильный.

Результат равен 0,00 4,00 0,00 и остается таким же. Но с каждой итерацией шага по времени позиция меняется.y должно уменьшиться (положение. x и угол должны остаться прежними)

 #include "include/box2d/box2d.h" #include lt;iostreamgt; #include lt;stdio.hgt;    int main(){  b2Vec2 gravity(0.0f, -10.0f); // define the gravity vector  b2World world(gravity); //create the world object  //Creating static Ground Body  b2BodyDef groundBodyDef; //body definition  groundBodyDef.position.Set(0.0f, -10.0f);   b2Body* groundBody = world.CreateBody(amp;groundBodyDef); // body definition is passed to the world object to create the ground body   b2PolygonShape groundBox; //create a ground polygon.  groundBox.SetAsBox(50.0f, 10.0f); //We use the SetAsBox shortcut to form the ground polygon into a box shape   groundBody-gt;CreateFixture(amp;groundBox, 0.0f); //creating the shape fixture  //Creating Dynamic Body  b2BodyDef bodyDef;  bodyDef.type = b2_dynamicBody; //By default bodies are static, so we should set the b2BodyType at construction time to make the body dynamic  bodyDef.position.Set(0.0f, 4.0f);  b2Body* body = world.CreateBody(amp;bodyDef);   b2PolygonShape dynamicBox; //create a box shap  dynamicBox.SetAsBox(1.0f, 1.0f); //A dynamic body should have at least one fixture with a non-zero density. Otherwise you will get strange behavior.  b2FixtureDef fixtureDef; // fixture definition using the box  fixtureDef.shape = amp;dynamicBox;  fixtureDef.density = 1.0f;  fixtureDef.friction = 0.3f;   float timeStep = 1.0f / 60.0f; //Integrators simulate the physics equations at discrete points of time -gt; ie timeStep   int32 velocityIterations = 6;  int32 positionIterations = 2;   for (int32 i = 0; i lt; 60;   i) {  world.Step(timeStep, velocityIterations, positionIterations);  b2Vec2 position = body-gt;GetPosition();  float angle = body-gt;GetAngle();  printf("%4.2f %4.2f %4.2fn", position.x, position.y, angle);  }   //return 0; }  

Приношу извинения за вопрос noobie, но не могу найти свою ошибку. я почти все копирую и вставляю!

Ответ №1:

Я на самом деле забыл включить body-gt;CreateFixture(amp;FixtureDef);