我想创建一个浮动的帮助气泡来介绍我的游戏的基本功能。这个气泡应该漂浮在我想要解释的角色上方,就像下面的图片一样。
为了实现这一点,我需要获取角色(在这种情况下是左侧按钮)的坐标,然后我可以将气泡角色添加到舞台上覆盖其他所有内容。最后一部分很容易,但我正在努力检索按钮的实际坐标,因为它在一个表格中。
这两个按钮是以这种方式添加到表格中的:
这是我通过sysouts得到的结果(按顺序):[0.0, 0.0]和[40.0, 130.0]。最后一个位置实际上是Table的位置,填充了屏幕上的蓝色区域。所以这个位置显然缺少Table用于放置Actor的东西,不能被使用(因为这只会得到Table的位置)。
(我也尝试过在这里使用t.localToStageCoordinates,其中t是Table。但结果相同。)
另一个我尝试过的解决方法是递归地搜索所有父级:
为了实现这一点,我需要获取角色(在这种情况下是左侧按钮)的坐标,然后我可以将气泡角色添加到舞台上覆盖其他所有内容。最后一部分很容易,但我正在努力检索按钮的实际坐标,因为它在一个表格中。
这两个按钮是以这种方式添加到表格中的:
t.add(btnLab).expandX().center();
t.add(btnSea).expandX().center();
我已经尝试了最明显的方法:
Vector2 loc = new Vector2(a.getX(), a.getY());
System.out.println("Loc: " + loc);
a.localToStageCoordinates(loc);
System.out.println("Loc: " + loc);
这是我通过sysouts得到的结果(按顺序):[0.0, 0.0]和[40.0, 130.0]。最后一个位置实际上是Table的位置,填充了屏幕上的蓝色区域。所以这个位置显然缺少Table用于放置Actor的东西,不能被使用(因为这只会得到Table的位置)。
(我也尝试过在这里使用t.localToStageCoordinates,其中t是Table。但结果相同。)
另一个我尝试过的解决方法是递归地搜索所有父级:
private static Vector2 getLoc(Actor a) {
return getLoc(new Vector2(a.getX(), a.getY()), a.getParent());
}
private static Vector2 getLoc(Vector2 loc, Actor g) {
System.out.println("Location: " + loc + ", Actor: " + g);
loc.x += g.getX();
loc.y += g.getY();
if(g.getParent() == null) return loc;
return getLoc(loc, g.getParent());
}
很遗憾,这给了我同样的结果。sysouts输出如下:
Location: [0.0:0.0], Actor: Table 40.0,130.0 944.0x508.0
Location: [40.0:130.0], Actor: Group 0.0,0.0 0.0x0.0
Location: [40.0:130.0], Actor: Group 0.0,0.0 0.0x0.0
我似乎无法获得表格中群组/演员的实际位置。
我应该如何做呢?
Stage
)中有一个Table
,它位于另一个Table
中的VerticalGroup
中。我按照下面的答案尝试了一下,但并没有成功。问题最终是由于在分配起始表位置之前未对元素进行布局。该答案中的任何舞台位置转换都不必要。一旦布局完成后,table.getX()
可以为我提供所需的舞台位置。 - bazola