LibGDX ShapeRenderer拒绝渲染

时间:2020-01-08 18:03:06

标签: java libgdx box2d

目前,我正在尝试在鼠标和主体之间绘制一个矩形,以使线段具有最大长度。

表示当屏幕上两点之间的距离小于一定量时,矩形应位于鼠标和主体之间。如果不是,则矩形应位于半径(从主体到鼠标的直线上的点)和主体之间。

我正在使用一些矢量逻辑来计算绘制点,但是当我似乎进入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();

这在Screen类内部,我感到很奇怪,因为当距离小于200时,线条可以完美绘制,尽管通过打印向量的x,y坐标似乎可以检出。

mousepos的x,y坐标打印出身体200距离之前和之后

MousePos: 213.0, 325.0
Entered If!
MousePos: 305.3836, 357.63123

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

Line being drawn when distance is under 200

由于距离小于200,因此在球和鼠标之间绘制了一条线。

Line not being drawn when distance is over 200

当距离超过200时,我们输入if语句,除非返回到200以下,否则不再画线。

谢谢!

1 个答案:

答案 0 :(得分:3)

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

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