如何确保动态 body 在 libgdx box2d 中没有应用重力

How to make sure a Dynamic body has no gravity applied to it in libgdx box2d

在我制作的游戏中,我有一个 body 跟随我的玩家,该玩家属于 Actor (scene2D) 类型。在他的压倒一切的行为方法中,他使用 libgdx 输入来移动。例如,(伪)if(gdxInput.keys(keys.up)){ applyForceToCenter(VElocity) xCoor = body.x yCoor = body.y

我如何确保 body 不会滑得到处都是?世界的重力为 0,0 所以如果我单击向上箭头玩家将永远不会停止所以在我巨大的 if else if 块输入语句中我输入 else linearVelocity = 0 这有效但是如果玩家按住右箭头键然后按住向上箭头键,玩家向右移动更多,然后向上移动,就好像他在冰上滑动一样。请告诉我一般情况下如何关闭播放器的所有重力。我不能只设置 body 的位置,因为我使用物体作为碰撞的一种方式,设置 body 的位置是为了关闭碰撞。

你的播放器有没有设置阻尼body?

playerBody.SetLinearDamping(0.2f);

如果您没有对 playerBody 应用任何东西,这会随着时间的推移将位置力减少到 0。

一旦你想停止你将速度设置为 0 例如

    if(!canFall){
        velocity.y = 0;
    }else
        velocity.y += MainScreen.GRAVITY.y;

    if(Gdx.input.isKeyPressed(Keys.A)){
        velocity.x -= 10 * Gdx.graphics.getDeltaTime();
    }
    else if(Gdx.input.isKeyPressed(Keys.D)){
        velocity.x += 10 * Gdx.graphics.getDeltaTime();
    }else
        velocity.x = 0;

所以一旦你停止你的速度将等于 0!