2
\$\begingroup\$

I'm creating my first libgdx / Box2D game where a player moves around using a mouseJoint.

My player has two fixtures, "main" and "question".

For some reason when I have these two fixtures, my player is no longer responsive to collisions or touch detection (i.e. I can't drag the player around). If I remove the "question" fixture, everything works.

Why is this? How can I fix it?


This is how I create the Player:

// create body BodyDef bodyDef = new BodyDef(); bodyDef.type = BodyDef.BodyType.DynamicBody; bodyDef.position.set(x, y); bodyDef.fixedRotation = true; body = world.createBody(bodyDef); // player main body fixture PolygonShape polygonShape = new PolygonShape(); polygonShape.setAsBox(bodyWidth / 2, bodyHeight / 2); // setAsBox takes half width, half height as params FixtureDef fixtureDef = new FixtureDef(); fixtureDef.shape = polygonShape; fixtureDef.restitution = 0.3f; // Bounciness - Keep value between 0 and 1. fixtureDef.density = 3; // Mass p/sqm - Keep value between 0 and 100 fixtureDef.friction = 0.8f; // Slippery - Keep value between 0 and 1 bodyFixture = body.createFixture(fixtureDef); bodyFixture.setUserData("player"); // player question fixture polygonShape = new PolygonShape(); polygonShape.setAsBox(questionWidth / 2, questionHeight / 2, new Vector2(0,0), 0); // setAsBox takes half width, half height as params fixtureDef.shape = polygonShape; fixtureDef.restitution = 0.3f; // Bounciness - Keep value between 0 and 1. fixtureDef.density = 3; // Mass p/sqm - Keep value between 0 and 100 fixtureDef.friction = 0.8f; // Slippery - Keep value between 0 and 1 fixtureDef.friction = 0.8f; // Slippery - Keep value between 0 and 1 fixtureDef.isSensor = true; questionFixture = body.createFixture(fixtureDef); questionFixture.setUserData("question"); 

I assume I'm doing something silly here—I'm still very much a noob when it comes to libgdx / Box2D.

\$\endgroup\$
6
  • \$\begingroup\$ You don't specify any translations for the Shapes, is it intentional that the Fixtures overlap with the bigger completely covering the smaller? \$\endgroup\$ Commented Dec 17, 2014 at 9:08
  • \$\begingroup\$ i moved the shapes over each other just for testing, i had them apart earlier - of course that made no difference. \$\endgroup\$ Commented Dec 17, 2014 at 9:40
  • 1
    \$\begingroup\$ You got the debug-renderer turned on, right? Does everything look Ok or is something visually out of place? \$\endgroup\$ Commented Dec 17, 2014 at 10:02
  • \$\begingroup\$ @bornander yep debug renderer is on and everything looks fine \$\endgroup\$ Commented Dec 17, 2014 at 10:47
  • \$\begingroup\$ No contact filters are active, or are you setting up mask bits somewhere for the body/fixture categories? \$\endgroup\$ Commented Dec 17, 2014 at 11:34

1 Answer 1

1
\$\begingroup\$

Well on your question fixture def, you set sensor true which makes it ignore collisions.

fixtureDef.isSensor = true; 

Unrelated but as a side note, I think you need to dispose your polygonShape at the end after creating everything.

polygonShape.dispose() 
\$\endgroup\$
1
  • \$\begingroup\$ I tried changing isSensor to false and it didn't fix it. And yep, i just omitted the dispose() call. \$\endgroup\$ Commented Dec 17, 2014 at 8:56

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.