Box2D collisions

This topic is 389 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

Recommended Posts

I'm really new to using Box2D. I've setup a small thing with a Dynamic body that falls onto a static one. When the box hits the body, it begins "vibrating" for a bit and shaking, then suddenly stops. If anyone has used it or might know what is happening I'd appreciate it,

That's the setup of the boxes.

	b2BodyDef groundBodyDef;
groundBodyDef.position.Set(100.0f, 400.0f);

b2Body* groundBody = world.CreateBody(&groundBodyDef);

b2PolygonShape groundBox;
groundBox.SetAsBox(240, 20);

groundBody->CreateFixture(&groundBox, 0.0f);

b2BodyDef bodyDef;
bodyDef.type = b2_dynamicBody;
bodyDef.position.Set(100.0f, 0.0f);
b2Body* body = world.CreateBody(&bodyDef);

b2PolygonShape dynamicBox;
dynamicBox.SetAsBox(32.0f, 32.0f);

b2FixtureDef fixtureDef;
fixtureDef.shape = &dynamicBox;
fixtureDef.density = 1.0f;
fixtureDef.friction = 0.3f;
body->CreateFixture(&fixtureDef);
body->SetAngularVelocity(20);
int32 velocityIterations = 8;
int32 positionIterations = 4;
		world.Step(ticks_per_frame, velocityIterations, positionIterations);
b2Vec2 position = body->GetPosition();

float32 angle  = body->GetAngle();
std::cout << angle<< "\n";

SDL_Rect rect = {position.x, position.y, 32, 32};
//SDL_Point point = {32, 0};
SDL_RenderCopyEx(mainren, textures[0], NULL, &rect, angle, NULL, SDL_FLIP_NONE);

Share on other sites

My first guess is that it's due to you using a rather large scale for your objects.

Box2d operates at a real-world scale of meters, so when you do SetAsBox(240, 20) then is actually 240meters x 20meters. Which is really rather large! That's like dropping a building.

What you should be doing is keeping the physics simulation on a more human scale (meters) and have a conversion (e.g. meters-to-pixels) used for rendering.

Edited by dmatter

Share on other sites

That's a very, very good point, I changed it to 20x10, and the other to 2x2, alas, still the same result

Edit: However rather than tripping out, it slides to the left a bit on landing and then freezes

Edited by tristan1333

Share on other sites

You do have an angular velocity set on your dynamic body which might cause it to want to slide or bounce on contact.

It shouldn't bounce because (I think) restitution is set to zero by default. But it might slide. Your static body is using the default friction value (0.2 I think) and your dynamic body's is set to 0.3. So the possibility of sliding is there.

So you might try removing the angular velocity or cranking up the friction of your bodies so that it comes to rest sooner.

Edited by dmatter

Share on other sites

I fixed it, thank you very much, it was an issue on my point not converting from radians oops.

1. 1
Rutin
26
2. 2
3. 3
4. 4
JoeJ
18
5. 5
gaxio
11

• 14
• 22
• 11
• 11
• 9
• Forum Statistics

• Total Topics
631763
• Total Posts
3002193
×