java - 如何在libgdx中保持相同的跳跃高度

标签 java libgdx box2d

我正在使用 libgdx 开发 2D 视频游戏。当我尝试让 body 跳跃时遇到了问题。 让它向右移动后并没有按预期跳跃。(我只能向右移动或跳跃)

如果 body 在向右移动之前跳跃,一切都会顺利。但是如果我决定将 body 向右移动后跳跃。 body 不再跳到相同的高度(跳得更低)。我也不明白为什么..

我跳跃 body 的方法:

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

我的 body 向右移动的方法

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

我阻止 body 向右移动的方法:

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

世界使用 -9.81f 重力, body 使用 1f 质量。

P.S:抱歉我的英语不好,这不是我的母语。

谢谢。

最佳答案

第一件事:切勿使用力量跳跃。根据力作用的时间长短,力会产生不同的效果。第二:不要使用线性阻尼。它让你的物理变得飘忽不定而不真实。在跳跃方法中,您可以使用脉冲而不是力量(实际上效果不太好)。我正在使用这个方法,效果很好

    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。

附注我使用这种方法而不是线性阻尼

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

这个方法看似太复杂,但其实很简单。第一部分处理 body 在地面上的运动,第二部分处理空中的运动。 if 语句防止在停止时改变 body 的方向,如果 body 向右移动,direction 变量可以为 1,如果 body 向左移动,则为 -1,如果 body 没有移动,则可以为 0。

关于java - 如何在libgdx中保持相同的跳跃高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26831389/

相关文章:

java - EclipseLink MySQLSyntaxErrorException 找不到错误

java - 如何使用 PTY 在 Scala 中生成进程?

java - Android LibGDX 游戏 : FPS drops because of long EGLImpl. eglSwapBuffers 调用

box2d - 当 body 开始与地面接触时,如何改变 body 的摩擦力?

java - 允许将整数分配给对象,但不允许将整数数组分配给对象数组?

android - PerspectiveCamera 3d 图形教程 libgdx

滚动视差背景,在 libgdx 中无限重复

android - libGDX box2dDebugRenderer 渲染光线吗?

c++ - 堆叠的 box2d 对象开始抖动

java - 这个 MYSQL 查询有什么问题