无法理解此算法中用于 java 中相机移动的 maths/code

Trouble understanding the maths/code used within this algorithm for camera movement in java

我正在 java 参考 youtube 视频编写游戏,遇到了一些我不太了解的代码和算法。

private float x, y;

public Camera(float x, float y) {
    this.x = x;
    this.y = y;
}

public void tick(GameObject object) {
    x += ((object.getX() - x) - 1000 / 2) * 0.05f;
    y += ((object.getY() - y) - 563 / 2) * 0.05f;

    System.out.println(x);

    if (x <= 0)
        x = 0;
    if (x >= 1032)
        x = 1032;
    if (y <= 0)
        y = 0;
    if (y >= 563 + 48)
        y = 563 + 48;
}

public float getX() {
    return x;
}

public void setX(float x) {
    this.x = x;
}

public float getY() {
    return y;
}

public void setY(float y) {
    this.y = y;
 }

}

现在,除了这个我都明白了

x += ((object.getX() - x) - 1000 / 2) * 0.05f;
y += ((object.getY() - y) - 563 / 2) * 0.05f;

在 tick 方法中。该方法是更新相机以跟随屏幕周围的玩家。 GameObject 参数被解析为玩家对象。摄像机 x 和 y 如何使用此算法跟随玩家?为什么我们要用摄像机 x/y 减去玩家 x/y,然后再乘以一个浮点数。我得到减去 windows width / 2 和 height / 2 将播放器居中在屏幕部分的中间。 根据 RealtutsGML,浮动使相机感觉更平滑。它并没有严格固定在玩家的位置上,它会稍微滑动。但是为什么 * 0.05 会发生这种情况呢? 然后在游戏中 class 在主要渲染方法中,摄像机 getX 和 getY 方法与 graphics2D 的转换方法一起确定摄像机在游戏中的移动位置。

    Graphics g = bs.getDrawGraphics();
    Graphics2D g2d = (Graphics2D) g;

    g.setColor(Color.BLUE);
    g.fillRect(0, 0, 1000, 563);

    g2d.translate(-camera.getX(), -camera.getY());

    handler.render(g);

    g2d.translate(camera.getX(), camera.getY());

显然,屏幕中心将位于坐标 (x + 1000 / 2, y + 563 / 2)。考虑到这一点,让我们仔细看看公式(只有 x 部分;y 完全相同):

x += ((object.getX() - x) - 1000 / 2) * 0.05f;

重新排列括号,我们得到:

x += (object.getX() - (x + 1000 / 2)) * 0.05f;

我们看到屏幕中心就在那里。让我们用变量 c 代替它使事情更清楚:

x += (object.getX() - c) * 0.05f;

第一项object.getX() - c是物体位置与屏幕中心的差值。因此,如果对象居中,则此差异为零。这正是我们需要移动相机以准确地将对象居中的量。如果我们有

x += (object.getX() - c);

...我们总是将对象保持在屏幕中心。但是我们有 0.05 的因素。因此,我们不会将相机移动整个距离。只是其中的一小部分。也就是说,我们正在将对象移近屏幕中心。如果距离很远,它会移动得很快(因为差异很大)。如果已经很近了,它会慢慢移动(因为差异很小)。 0.05 的因素是设置居中的即时程度。 0 的因子根本不会移动对象,1 的因子会立即使对象居中。介于两者之间的一切都代表具有不同加速度的平滑运动。您可以将此因素想象为屏幕中心和对象之间 spring 的刚度。