java - 独立于帧率的 LibGdx 物理

标签 java android libgdx game-physics frame-rate

我正在开发一款简单的平台游戏,例如 super 马里奥。我将 Java 与 LibGdx 引擎一起使用。我的物理问题与帧率无关。在我的游戏中,角色可以跳跃,跳跃高度显然取决于帧率。

在我的桌面上,游戏运行良好,每秒运行 60 帧。我还在平板电脑上以较低的 fps 运行该游戏。发生的事情是角色可以跳得比我在桌面版上跳的高得多。

我已经看过一些关于固定时间步长的文章,我确实理解它,但不足以将其应用于这种情况。我似乎错过了什么。

这是代码的物理部分:

protected void applyPhysics(Rectangle rect) {
    float deltaTime = Gdx.graphics.getDeltaTime();
    if (deltaTime == 0) return;
    stateTime += deltaTime;

    velocity.add(0, world.getGravity());

    if (Math.abs(velocity.x) < 1) {
        velocity.x = 0;
        if (grounded && controlsEnabled) {
            state = State.Standing;
        }
    }

    velocity.scl(deltaTime); //1 multiply by delta time so we know how far we go in this frame

    if(collisionX(rect)) collisionXAction();
    rect.x = this.getX();
    collisionY(rect);

    this.setPosition(this.getX() + velocity.x, this.getY() +velocity.y); //2
    velocity.scl(1 / deltaTime); //3 unscale the velocity by the inverse delta time and set the latest position

    velocity.x *= damping;

    dieByFalling();
}

调用 jump() 函数并将变量 jump_velocity = 40 添加到 velocity.y。

速度用于碰撞检测。

最佳答案

我认为你的问题出在这里:

velocity.add(0, world.getGravity());

您还需要在修改速度时缩放重力。尝试:

velocity.add(0, world.getGravity() * deltaTime);

单独说明一下,尝试使用 box2D,它可以为您处理这些问题:)

关于java - 独立于帧率的 LibGdx 物理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21609600/

相关文章:

java - 在 libgdx 3D 中对立方体进行纹理化

java - 使用 hamcrest 验证 Optional 的最佳实践

java - 获取多边形体的顶点列表

java - 有没有办法在提交到 Git 之前强制执行 IntelliJ 代码样式格式?

java - 处理带有 XML 数据的传入 SOAPMessage 时出错

android - 读取 DataOutputStream 的内容

android - 如何显示进度条?

java - 如何像照片应用一样滑动多个图像?

java - 如何将对象从节点移动到节点? Libgdx Box2d A*寻路

java - Android libgdx如何避免静态方法和枚举