На сцене мало актеров, нарисованы линии, соединяющие их центры, такие как график, узлы и ребра.Узлы градиентные.При перетаскивании я использую следующий код
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) больше возвращаемого значения.