Рисование линий на сцене - PullRequest
0 голосов
/ 01 февраля 2019

На сцене мало актеров, нарисованы линии, соединяющие их центры, такие как график, узлы и ребра.Узлы градиентные.При перетаскивании я использую следующий код

   public void touchDragged(InputEvent event, float eventOffsetX, float 
     eventOffsetY, int pointer) 
                {
                    float deltaX = eventOffsetX - self.grabOffsetX;
                    float deltaY = eventOffsetY - self.grabOffsetY;

                   self.moveBy(deltaX, deltaY);
                    moveCoordinatesBy((int)deltaX,(int)deltaY);
                    }

. Метод moveCoordinatesBy обновляет координату центра узла.который используется для рисования линий (краев), соединяющих.Это работает отлично.

Моя проблема в том, что когда я использую действие moveTo для узлов, мне нужно одновременно обновлять ребра.Для этого мне нужно обновить координаты там центра.Для этого я использую следующий код в методе действия узла -

  public void act(float dt)
    {
    super.act(dt);


    Vector2 loc = new Vector2();
    loc.x = self.getX()+ self.getWidth()/2;
    loc.y = self.getY() + self.getHeight()/2;
    Vector2 v = new Vector2();
    v = self.localToStageCoordinates(loc);

   setCoordinates((int)v.x, (int)v.y);
   }

Полученные координаты не являются центром узла, они почти умножены на 2. Я что-то не так делаю?

А также getWidth() и self.getHeight(), возвращающие двойной размер.Когда актер (узел) масштабируется, getWidth() и self.getHeight() возвращают произвольные значения в зависимости от того, как он расположен на сцене.Далее из (0,0) больше возвращаемого значения.

1 Ответ

0 голосов
/ 05 февраля 2019
v = self.localToStageCoordinates(loc);

над строкой кода не требуется, поскольку все актеры были непосредственно добавлены на сцену.Удалив localToStageCoordinates(loc), теперь он работает нормально.

...