我在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);


这是我的图块代码:

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处渲染。但是,请看以下屏幕截图:



磁贴不在屏幕上,我不知道为什么。我想念什么?

提前致谢。

最佳答案

看起来原因是HorizontalGroupAlign.center中的默认对齐方式。因此,Tile y位置为-25.0(这是Tile演员的高度/ 2)。因此,例如,如果您要创建一个高度为100的Tile,则该Tile在Horizo​​ntalGroup中的y位置将为-50。

我看到了两种根据需要定位图块的方法:


将Horizo​​ntalGroup的对齐方式固定到底部:submitGroup.align(Align.bottom);
通过将Horizo​​ntalGroup的y位置设置为25而不是0

10-07 22:20