舞台上的actor很少,绘制的线条将它们的中心连接起来,例如图形,节点和边缘。节点是可分级的。在Drag上,我使用以下代码
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动作时,我需要同时更新边缘。为此,我需要更新该中心的坐标。为此,我在Node的act方法中使用以下代码-
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()
返回两倍的大小。缩放actor(节点)时,getWidth()
和self.getHeight()
会根据其在舞台上的放置方式返回套利值。离(0,0)更大的返回值。
答案 0 :(得分:0)
v = self.localToStageCoordinates(loc);
不需要上面的代码,因为所有参与者都直接添加到了舞台上。现在删除localToStageCoordinates(loc)
即可正常工作。