#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);