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;

希望对您有所帮助