LibGDX ShapeRenderer отказывается от рендеринга - PullRequest
1 голос
/ 08 января 2020

В настоящее время я пытаюсь визуализировать прямоугольник между мышью и телом. Уловка в том, что я хочу, чтобы линия имела максимальную длину.

Значение, когда расстояние между двумя точками на экране меньше определенное количество прямоугольника должно быть между мышью и телом. Если нет, то прямоугольник должен находиться между радиусом (точка на линии от тела к мыши) и телом.

Я использую некоторые векторные логарифмы c, чтобы вычислить точку для рисования, но когда мне кажется, что go внутри моего оператора 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, линия dr aws отлично, хотя из печати x,y координат векторов это, кажется, проверяется.

Печать координат x, y mousepos до перемещения на расстояние 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 no линия больше не проводится, если мы не вернемся к до 200.

Спасибо!

1 Ответ

3 голосов
/ 08 января 2020

Vector2 имеет метод limit для ограничения длины, если она превышает определенное значение.

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