# Box2D platformer movement. Should i mess with velocity?

I have a platformer game in which I implemented the movement using a wheel attached to the hero. For jumping I use this:

player.body.applyLinearImpulse(new Vec2(0, 30000000), player.body.getPosition());


The problem is that the xVelocity doesn't remain the same during the jump so it isn't looking natural. Is there any way to modify only the x velocity of the body so that before jumping I store it in a variable and after jumping I apply it to the body?

I hope you understand what I am trying to say.

• That behaviour looks pretty uncommon. Also your impulse is enormous. In my game, the impulse I used for jumping was literally 1. Try figuring out what is wrong with your Box2D world. – Martijn Courteaux Apr 12 '12 at 9:32
• Well, i created the world with the gravity Vector2(0, -10). And for my human i have 2 bodies both with 1f density. I don't know why but a smaller impulse wont move the body. It seemed pretty weird to me too but i didn't know what to do. – Romeo Apr 12 '12 at 10:02
• I think that you are creating your bodies with the size of pixels... Box2D works in meters. You have to scale the scene when you render the it. – Martijn Courteaux Apr 12 '12 at 10:04
• That's exaclty what i was doing. Can you please tell me a good ratio pixel to meter? Or is there a standard? – Romeo Apr 12 '12 at 10:11
• I used something like 60. – Martijn Courteaux Apr 12 '12 at 10:12

## 1 Answer

You are defining your bodies in pixels instead of meters. Box2D uses meters. This way, your bodies got a very very huge mass, which causes you having to apply to big forces / impulses.

You have to define the lengths in meters and upscale your scene when you draw it.

• Also if you can help me a little bit. I defined my PIXEL_TO_METER = 60f. How do i need to modify these 2 functions: public Vec2 screenToWorld(Vec2 screenV) { return new Vec2(screenV.x + this.x, yFlip * screenV.y + this.y ); } and public Vec2 worldToScreen(Vec2 worldV) { return new Vec2(worldV.x - this.x, yFlip * worldV.y - this.y); } ? – Romeo Apr 12 '12 at 10:38
• @Romeo Start a new question. – doppelgreener Apr 12 '12 at 11:12