Jump to content
  • Advertisement
tristan1333

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.

If you intended to correct an error in the post then please contact us.

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 this post


Link to post
Share on other sites
Advertisement

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 this post


Link to post
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 this post


Link to post
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 this post


Link to post
Share on other sites

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!