LibGDX ShapeRenderer 拒绝渲染

LibGDX ShapeRenderer refusing the render

目前我正在尝试在鼠标和 body 之间渲染一个矩形,问题是我希望该行具有最大长度。

意思是当屏幕上两点之间的距离小于一定量时,矩形应该在鼠标和 body 之间。如果不是,矩形应该在半径(从 body 到鼠标的直线上的点)和 body.

之间

我正在使用一些矢量逻辑来计算要绘制的点,但是当我似乎进入我的 if 语句时,在 200 距离内绘制的线就消失了。

 ShapeRenderer sr = new ShapeRenderer();
 sr.setColor(Color.WHITE);
 sr.begin(ShapeRenderer.ShapeType.Filled);

 if (ballPosition.dst(mousePos) > 200) {
     System.out.println("Entered If!");

     //Calculate point a distance away from ballPosition
     Vector2 cloneMousePos = new Vector2(mousePos);
     Vector2 dir = cloneMousePos.sub(ballPosition);
     dir = dir.nor().scl(100);

     Vector2 test = ballPosition.add(dir);
     mousePos = test;
 }


 System.out.println("MousePos: " + mousePos.x + ", " + mousePos.y);
 sr.rectLine(ballPosition, mousePos, 4f);
 sr.end();

这是在屏幕内 class 我觉得很奇怪,因为当距离小于 200 时,线条画得很完美,尽管从打印矢量的 x,y 坐标来看它似乎正在检查出。

在 body 和

移动距离 200 之前打印 mousepos 的 x,y 坐标
MousePos: 213.0, 325.0
Entered If!
MousePos: 305.3836, 357.63123

编辑: 根据评论中的建议,我添加了一些图片。

由于距离小于 200,这里正在绘制球和鼠标之间的一条线。

此时距离超过 200,我们输入 if 语句,不再绘制任何线,除非我们 return 小于 200。

谢谢!

Vector2 有一个 limit 方法来限制长度,如果大于某个值。

Vector2 dir = new Vector(mousePos).sub(ballPosition)
dir.limit(200f)
sr.rectLine(ballPosition, dir.add(ballPosition), 4f);