目前,我正在尝试在鼠标和主体之间绘制一个矩形,以使线段具有最大长度。
表示当屏幕上两点之间的距离小于一定量时,矩形应位于鼠标和主体之间。如果不是,则矩形应位于半径(从主体到鼠标的直线上的点)和主体之间。
我正在使用一些矢量逻辑来计算绘制点,但是当我似乎进入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
编辑: 根据评论中的建议,我添加了一些图片。
由于距离小于200,因此在球和鼠标之间绘制了一条线。
当距离超过200时,我们输入if语句,除非返回到200以下,否则不再画线。
谢谢!
答案 0 :(得分:3)
Vector2
有一种limit
方法来限制长度(如果大于某个值)。
Vector2 dir = new Vector(mousePos).sub(ballPosition)
dir.limit(200f)
sr.rectLine(ballPosition, dir.add(ballPosition), 4f);