LibGDX:获取边界的问题
LibGDX: Problems with getting Bounds
我在获取 Table 的 x 和 y 时遇到问题。
我有一个包含菜单项单元格的菜单。现在我想通过简单的 AABB 检测来检查 table 之外的触地得分是否发生。
这很好用!
现在我想在 Table 之外添加子菜单并执行 table.addActor(subMenu)。
现在不行了。
如果我打印 x 和 y,我会得到 1.0、1.0,但这不是正确的值。
使用 table.getX(align) 我也得到了错误的值。
public void addItem (MenuItem item) {
add(item).fillX().row();
pack();
item.addListener(menuItemListener);
PopupMenu subMenu = item.getSubMenu();
if (subMenu != null) {
subMenu.setParent(this);
subMenu.setStage(getStage());
}
}
public void showMenu() {
getParent().addActor(this);
Stage stage = getStage();
if (stage != null) stage.addListener(stageListener);
}
/** Hides this popupMenu and all its subMenus */
protected boolean hideMenu() {
if (!getParent().getChildren().removeValue(this, true)) return false;
Stage stage = getStage();
if (stage != null) {
stage.removeListener(stageListener);
stage.unfocus(this);
}
childrenChanged();
return true;
}
public boolean contains (float x, float y) {
return getX() <= x && getX() + getWidth() >= x && getY() <= y && getY() + getHeight() >= y;
}
public boolean menuStructureContains (float x, float y) {
return contains(x, y) || subMenu != null && subMenu.menuStructureContains(x, y);
}
我但是我需要单元格的 x 和 y(获取它们的值也不起作用)。
编辑:菜单的位置被另一个 class 改变了。如果我将菜单的 x、y 转换为舞台并且不设置它的位置,它就可以工作。
如果我设置 potition,它会将转换后的 x / y 值加倍。
从 here 开始,只需创建一个 class 即可为您提供演员在舞台上的位置。
public static Vector2 getStageLocation(Actor actor) {
return actor.localToStageCoordinates(new Vector2(0, 0));
}
您需要在 (0,0) 处使用新向量的原因是因为那是您演员的左下角。然后它会将其转换为舞台坐标并为您提供演员的实际位置。
然后你可以做getStageLocation.x;
和getStageLocation.y;
希望对您有所帮助
我在获取 Table 的 x 和 y 时遇到问题。
我有一个包含菜单项单元格的菜单。现在我想通过简单的 AABB 检测来检查 table 之外的触地得分是否发生。 这很好用!
现在我想在 Table 之外添加子菜单并执行 table.addActor(subMenu)。 现在不行了。
如果我打印 x 和 y,我会得到 1.0、1.0,但这不是正确的值。 使用 table.getX(align) 我也得到了错误的值。
public void addItem (MenuItem item) {
add(item).fillX().row();
pack();
item.addListener(menuItemListener);
PopupMenu subMenu = item.getSubMenu();
if (subMenu != null) {
subMenu.setParent(this);
subMenu.setStage(getStage());
}
}
public void showMenu() {
getParent().addActor(this);
Stage stage = getStage();
if (stage != null) stage.addListener(stageListener);
}
/** Hides this popupMenu and all its subMenus */
protected boolean hideMenu() {
if (!getParent().getChildren().removeValue(this, true)) return false;
Stage stage = getStage();
if (stage != null) {
stage.removeListener(stageListener);
stage.unfocus(this);
}
childrenChanged();
return true;
}
public boolean contains (float x, float y) {
return getX() <= x && getX() + getWidth() >= x && getY() <= y && getY() + getHeight() >= y;
}
public boolean menuStructureContains (float x, float y) {
return contains(x, y) || subMenu != null && subMenu.menuStructureContains(x, y);
}
我但是我需要单元格的 x 和 y(获取它们的值也不起作用)。
编辑:菜单的位置被另一个 class 改变了。如果我将菜单的 x、y 转换为舞台并且不设置它的位置,它就可以工作。
如果我设置 potition,它会将转换后的 x / y 值加倍。
从 here 开始,只需创建一个 class 即可为您提供演员在舞台上的位置。
public static Vector2 getStageLocation(Actor actor) {
return actor.localToStageCoordinates(new Vector2(0, 0));
}
您需要在 (0,0) 处使用新向量的原因是因为那是您演员的左下角。然后它会将其转换为舞台坐标并为您提供演员的实际位置。
然后你可以做getStageLocation.x;
和getStageLocation.y;
希望对您有所帮助