Java 2D Game - Прыжки только если игрок на земле

Я делаю 2D-платформер и просто добавил гравитацию и прыжки.

Это работает так, как должно, однако, если после того, как игрок завершил прыжок, пробел все еще удерживается, игрок просто продолжает прыгать, находясь в воздухе.

Я знаю, что мне нужно проверить, действительно ли игрок находится на земле, но когда я это делаю, он всегда возвращается как "ложь", как описано в моем методе прыжков:

// Controls both falling and the jumping action.
// The MapObject list is a collection of every object the player can
// collide with on that map. Currently it only contains a single 'ground' object.

    public void fall(ArrayList<MapObject> objects)
{
    int distance = 0;

    if (jumpTicks > 0)
    {
        float jumpHeight = jumpSpeed * (jumpTicks / maxJumpTicks);
        System.out.println(jumpTicks + "/" + maxJumpTicks + " = " + jumpHeight);
        y -= jumpHeight;
        jumpTicks--;
    }
    else
    {
        for (MapObject obj : objects)
        {
            if (this.y + this.height >= obj.y)
            {
                // This cancels falling if the player's feet are on top
                // of the ground, but for some reason setting an 'isOnGround'
                // boolean to 'true' here and checking for it in the 'jump()'
                // method does not work, it's always 'false'.
                return;
            }
            distance = obj.y - (this.y + this.height);
        }
        if (distance > fallSpeed)
        {
            y += fallSpeed;
        }
        else
        {
            y += distance;
        }

    }
}

// This doesn't make the player jump, it just adds jump time to the player
// if it's not already jumping.

public void jump()
{
    if (jumpTicks > 0)
    {
        return;
    }
    this.jumpTicks = maxJumpTicks;
    this.jumpSpeed = 10;
}

1 ответ

Прежде чем изменить его скорость, проверьте его y значение для пола

function jump() {
    if (jumpTicks > 0) {
        return;
    }
    if (this.y === floorY) {
        this.jumpTicks = maxJumpTicks;
        this.jumpSpeed = 10;
    }
}
Другие вопросы по тегам