如何在libgdx中保持相同的跳转高度

时间:2014-11-09 18:01:37

标签: java libgdx box2d

我正在使用libgdx开发2D视频游戏。当我试图跳跃身体时,我遇到了一个问题。 它向右移动后没有按预期跳跃。(我只能向右移动或跳转)

如果身体在向右移动之前跳起来,一切都会好起来的。但是如果我决定在向右移动后跳跃身体。身体不再跳到相同的高度(它跳得不那么高)。我不明白为什么......

跳我身体的方法:

    if (player.isPlayerOnGround()) {
        body.applyForceToCenter(0, 200, true);
    }

我的身体移动方法

    if (player.isPlayerOnGround()) {
        body.setLinearDamping(0f);
        body.setLinearVelocity(1f,0f);
        isMoving = true;
    }

我的方法是阻止身体向右移动:

    body.setLinearDamping(5f);
    isMoving = false;

世界使用-9.81f重力,身体1f用于质量。

P.S:对不起,我的英语不好,不是我的母语。

谢谢。

1 个答案:

答案 0 :(得分:2)

第一件事:永远不要用力量跳跃。力根据力的作用时间有不同的效果。第二:不要使用linearDamping。它使你的物理浮动而不是真实。你可以在跳跃方法中使用冲动而不是强制(实际上它不能很好地工作)。我正在使用这种方法而且效果很好

    public void jump() {
        if (jumpDelta >= Constants.PLAYER_JUMP_RATE) {
            grounded = level.getContactListener().numFootContacts > 0;
            if (grounded) {
                body.setLinearVelocity(body.getLinearVelocity().x, 7);
                jumpDelta = 0;
            }
        }
    }

if (jumpDelta >= Constants.PLAYER_JUMP_RATE)阻止跳得太快(如同两次或多次跳跃),grounded = level.getContactListener().numFootContacts > 0;检查玩家是否在平台上,最后body.setLinearVelocity(body.getLinearVelocity().x, 7);改变了身体的垂直速度。改变速度比施加脉冲更好,因为脉冲不会设定速度,它会增加速度。因此,如果玩家以垂直速度-3 m / s向下移动,那么它的速度将变为4,而不是我们想要的7。

P.S。而不是线性阻尼我使用这种方法

    public void stopMoving() {
        if (grounded) {
            if (Math.abs(body.getLinearVelocity().x) <= 0.5f)
                body.setLinearVelocity(0, body.getLinearVelocity().y);
            else
                body.applyLinearImpulse(-direction * 0.5f, 0,
                        body.getPosition().x, body.getPosition().y, true);
        } else if (Math.abs(body.getLinearVelocity().x) <= 0.1f)
            body.setLinearVelocity(0, body.getLinearVelocity().y);
        else
            body.applyLinearImpulse(-direction * 0.1f, 0, body.getPosition().x,
                    body.getPosition().y, true);
    }

这种方法看起来太复杂了,但它非常简单。第一部分处理身体在地面上的运动,第二部分在空中处理。 if-statements阻止在停止时改变身体的方向,如果身体向右移动,direction变量可以是1,如果身体向左移动则为-1,如果身体不移动则为0。