在LibGDX中定位WidgetGroup

时间:2014-06-19 14:45:33

标签: java widget libgdx scene2d

我在LibGDX中使用了一个可以正常工作的Horizo​​ntalGroup。我想创建一排瓷砖。但是当我尝试使用setPosition()方法定位组时,它并不像我希望的那样定位,也就是说,它不会使用我的“y”值进行渲染。这是代码:

a = new Tile(missingwords.getAM().get("a2.png", Texture.class), "a", 3);
b = new Tile(missingwords.getAM().get("a2.png", Texture.class), "a", 3);
c = new Tile(missingwords.getAM().get("a2.png", Texture.class), "a", 3);
a.setSize(50, 50);
b.setSize(50, 50);
c.setSize(50, 50);
submitGroup = new HorizontalGroup();
submitGroup.addActor(a);
submitGroup.addActor(b);
submitGroup.addActor(c);
submitGroup.setPosition((Gdx.graphics.getWidth() - submitGroup.getMinWidth()) / 2, 0);
stage.addActor(submitGroup);

这是我的Tile代码:

public class Tile extends Actor {
private String letter;
private int points;
private Texture texture;

public Tile(Texture tileTexture, String letter, int points) {
    this.letter = letter;
    this.points = points;   
    texture = tileTexture;
}

@Override
public void draw(Batch batch, float parentAlpha) {
    batch.draw(texture, getX(), getY(), getWidth(), getHeight());
}

如您所见,我使用:

submitGroup.setPosition((Gdx.graphics.getWidth() - submitGroup.getMinWidth()) / 2, 0);

这意味着它应该在y = 0时渲染。但是,请看一下这个截图:

瓷砖不在屏幕上,我不知道为什么。我错过了什么?

提前致谢。

1 个答案:

答案 0 :(得分:2)

看起来原因是HorizontalGroupAlign.center中的默认对齐方式。因此,Tile y位置是-25.0(这是Tile actor的高度/ 2)。因此,例如,如果要创建高度为100的平铺,那么Horizo​​ntalGroup中平铺的y位置将为-50。

我看到两种方法可以像你想要的那样定位瓷砖:

  1. 将Horizo​​ntalGroup的对齐方式修复为底部:submitGroup.align(Align.bottom);
  2. 只需将Horizo​​ntalGroup的y位置设置为25而不是0;