I'm making a topdown 2.5D game (think the legend of zelda: a link to the past) using libgdx and box2D.

to simulate friction from a topdown perspective, i've set the gravity for the box2D world to 0, and added a friction joint to simulate friction with the floor.
this joint requires 2 bodies, one moving and one stationary and it slows down the moving one simulating friction.
my movable body is a dynamic body (player), and my stationary body (anchor) is a static body that is a sensor (to avoid collisions with bodies)

now I've increased the speed of the playable character, and it feels like he's skating over the ground.
I want to increase the friction, but after I'm not noticing any difference after changing variables.

the variables i've tried changing (that didn't seem to do anything) include:

  • the .friction on the fixtureDef of either body (player + anchor)
  • the size of the anchor
  • the .maxForce of the joint

How do I increase the friction caused by a friction joint in libgdx's box2D implementation?

  • \$\begingroup\$ Can you provide screenshot of your inspector or our code for better solution. \$\endgroup\$
    – Rakesh
    Jun 22 '17 at 16:19

After some further fiddling with the variables, increasing the maxForce on the FrictionJointDef did in fact increase the friction. it just needed a very large number (i'm using 55k) to get to a value that feels good.

  • \$\begingroup\$ If you need to set it to that high you really need to re-work your scale I'd imagine. Remember that you should be using meters for your units. \$\endgroup\$
    – Charanor
    Jun 24 '17 at 14:18
  • \$\begingroup\$ @Charanor that's what i'm worried about. i want my player character to move at a constant speed when pressing a key, so i'm using setLinearVelocity for it. The value that felt right was 50f. the player itself is a circle with a radius of 8f. i'll try to reduce the cirlce and the value for the linear velocity to somewhat lower values. \$\endgroup\$
    – Serris
    Jun 25 '17 at 20:29
  • \$\begingroup\$ That player has an 8m radius and moves at 50 m/s! The player radius should probably be around .5 or even .25 for a person-sized object (not sure how much space a human occupies haha...). And a human walks at about 1.5 m/s. Just in case you wanted some numbers ;) \$\endgroup\$
    – Charanor
    Jun 25 '17 at 20:33
  • \$\begingroup\$ Also it is suggested that you don't use setLinearVelocity and instead use applyLinearImpulse instead for constant speed. \$\endgroup\$
    – Charanor
    Jun 25 '17 at 20:40
  • \$\begingroup\$ @Charanor i had already looked into using linearimpulse, but it didn't achieve quite the same as the linearvelocity. i did put a little todo in my trello to follow up on it later. thanks for explaining the box2d measurements, it does sound a little silly when you put it like that :) \$\endgroup\$
    – Serris
    Jun 26 '17 at 13:56

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.