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
相关产品推荐
相关产品推荐

