移动Box2D Body的简单方法

问题描述 投票:0回答:2

在普通的java中,您只需向坐标添加值即可,例如:

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

有什么方法可以对 Box2D 主体执行此操作吗?因为如果我这样做:

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);
        }

然后物体继续朝那个方向移动,直到我施加不同的力。那么有没有办法让它移动一个恒定的量,而不是永远以恒定的速度移动呢?我尝试过摩擦,但看起来很痛苦。

java libgdx box2d
2个回答
1
投票

Body 有一个 setTransform(float x, float y, float angle) 方法。

所以,player.getBody().setTransform(-0.12f, 0.0f, 角度-此处);


0
投票

Peter 的代码也有效,但我找到了另一种方法,因为 setTransform 可能会导致潜在的不必要的失败:

    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)) {
         velX = -2.0f;
    }

    player.getBody().setLinearVelocity(velX, velY);

每当按下某个键时,就会设置

velX
velY
,如果未按下任何按钮,则默认设置为 0。

© www.soinside.com 2019 - 2024. All rights reserved.