LibGDX:获得边界的问题

时间:2015-09-21 17:12:44

标签: java libgdx scene2d

我在获取表格的x和y时遇到问题。

我有一个菜单,其中包含MenuItems的单元格。现在我想检查表外的touchDown是否发生了sipmle AABB dedection。 这很好用!

现在我想在表外添加subMenus并执行table.addActor(subMenu)。 现在它不起作用。

如果我打印x和y我得到1.0,1.0但这不是正确的值。 使用table.getX(对齐)我也得到了错误的值。

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(得到它们的值也不起作用)。

编辑:菜单的位置被其他类更改。如果我将菜单的x,y转换为舞台并且不设置其位置,则可以正常工作。

如果我设置了potition,它会将转换的x / y值加倍。

1 个答案:

答案 0 :(得分:2)

here开始,只需创建一个类,它可以为您提供舞台上演员的位置。

public static Vector2 getStageLocation(Actor actor) {
    return actor.localToStageCoordinates(new Vector2(0, 0));
}

你需要在(0,0)处使用新向量的原因是因为这是你演员的左下角。然后它会将其转换为舞台坐标,并为您提供演员的实际位置。

然后你可以getStageLocation.x;getStageLocation.y;

希望这有帮助