Programmer_10111 Programmer_10111 - 1 year ago 60
Java Question

Simple way to move Box2D Body

In plain java, you can just add values to the coordinates like:

object.x += 5;
object.y += 5;
render(object, object.x, object.y);

Is there any way to do this to a Box2D body? Because if I do this:

if(Gdx.input.isKeyPressed(Input.Keys.A) && player.getBody().getLinearVelocity().x >= -2.0f) {
player.getBody().applyLinearImpulse(new Vector2(-0.12f, 0.0f), player.getBody().getWorldCenter(), true);

then the object keeps going in that direction until I apply a different force. So is there any way to move it a constant amount instead of keep on moving it forever in a constant velocity? I have tried experimenting with friction but it seems like a pain.

Answer Source

Peter's code also works but I found another way since setTransform may cause potentially unwanted failures:

    float velX = 0, velY = 0;
    if(Gdx.input.isKeyPressed(Input.Keys.W)) {
        velY = 2.0f ;
    } else if(Gdx.input.isKeyPressed(Input.Keys.D)) {
        velX = 2.0f;
    } else if(Gdx.input.isKeyPressed(Input.Keys.S)) {
        velY = -2.0f;
    } else if(Gdx.input.isKeyPressed(Input.Keys.A)) {
         = -2.0f;

    player.getBody().setLinearVelocity(x, y);

Whenever a key is pressed, the velocityX or the velocityY is set and if nothing is pressed, they are set to 0 by default.