You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LibGDX:如何将实体移动方向投影线缩放为固定长度

问题原因

你当前的实现直接对帧位移向量做固定缩放,而不同移动方向下每帧的位移向量本身长度不固定,比如横向移动的帧位移向量长度为1、斜向移动的帧位移向量长度为√2,乘相同系数后得到的投影线长度自然会有差异。

解决方法

只需要把位移向量先转为单位向量(长度固定为1),再乘你要的投影线长度即可,这样不管移动方向如何,投影线的总长度都会和你设置的scalar值完全一致。注意要额外判断位移是否为零向量,避免实体静止时归一化操作报错。

修改后的update方法代码如下:

@Override
public void update() {
    body.aabb.getCenter(posThisFrame);
    posLastFrame.set(posThisFrame).sub(body.bodyMovementTracker.getSpritePosDelta());
    // 计算帧位移向量
    projection.set(posThisFrame).sub(posLastFrame);
    // 仅当实体有移动时处理,避免零向量运算报错
    if (projection.len2() > 0) {
        // 先转为单位向量,再缩放至目标长度
        projection.nor().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();
        }
    }
}

你也可以直接用LibGDX内置的setLength方法简化写法,效果完全一致:

projection.setLength(scalar).add(posLastFrame);

修改后你定义的scalar参数就直接对应投影线的固定长度,不需要调整原有数值就能得到你预期的效果。


内容的提问来源于stack exchange,提问作者OldLavyGenes474

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 17:45:05