LibGDX:缩放运动投影线以始终保持相同长度

LibGDX: Scale Movement Projection Line to Always be the Same Length

我正在 LibGDX 开发一款游戏。现在,我正在努力从移动实体的 body 当前位置沿其移动方向画一条线。也许我没有说对,所以这是我对我所说内容的艺术表现。

我遇到的问题是垂直线总是比对角线长得多,而对角线总是比水平线长得多。我想要的是无论方向如何,从实体投影的线总是相同的长度。

下面是用于从实体 body 的中心绘制线条的代码。如您所见,我正在缩放线(例如,按 25.0f)。也许有一个公式可以用来根据方向动态更改此标量?

public class BodyMovementProjection implements Updatable {

    public final Body body;
    public final ShapeRenderer shapeRenderer;

    public boolean debugProjection = false;
    public float scalar = 25.0f;

    private final Vector2 posThisFrame = new Vector2();
    private final Vector2 posLastFrame = new Vector2();
    private final Vector2 projection = new Vector2();
    
    private float[] debugColorVals = new float[4];

    public BodyMovementProjection(Body body) {
        this.body = body;
        this.shapeRenderer = body.entity.gameScreen.shapeRenderer;
    } // BodyMovementProjection constructor

    @Override
    public void update() {
        body.aabb.getCenter(posThisFrame);
        posLastFrame.set(posThisFrame).sub(body.bodyMovementTracker.getSpritePosDelta());
        projection.set(posThisFrame).sub(posLastFrame).scl(scalar).add(posLastFrame);
        if (debugProjection) {
            shapeRenderer.begin(ShapeRenderer.ShapeType.Line);
            shapeRenderer.setColor(debugColorVals[0], debugColorVals[1], debugColorVals[2], debugColorVals[3]);
            shapeRenderer.line(posLastFrame, projection);
            shapeRenderer.end();
        } // if
    } // update

    public void setDebugColorVals(float r, float g, float b, float a) {
        debugColorVals[0] = r;
        debugColorVals[1] = g;
        debugColorVals[2] = b;
        debugColorVals[3] = a;
    } // setDebugColorVals

} // BodyMovementProjection

在缩放之前进行标准化。 通过归一化,方向向量的长度为 1 个单位,然后将其缩放 25 个单位,每次都得到一个 25 个单位的向量,无论当前位置和先前位置相距多远。