Позиционирование WidgetGroup в LibGDX

#java #widget #libgdx #scene2d

#java #виджет #libgdx #scene2d

Вопрос:

Я использую горизонтальную группу в LibGDX, которая отлично работает. Я хочу создать ряд плиток. Но когда я пытаюсь позиционировать группу с помощью метода 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. Однако взгляните на этот снимок экрана:

Плитки отсутствуют на экране, и я не знаю почему. Чего мне не хватает?

Заранее спасибо.

Комментарии:

1. Интересная вещь: я напечатал getY() значение в конструкторе и есть -25.0 . Я в замешательстве…

Ответ №1:

Похоже, причиной является выравнивание по умолчанию в HorizontalGroup: Align.center . Из-за этого позиции плитки y равны -25.0 (что соответствует высоте / 2 субъекта плитки). Так, например, если вы создадите плитку высотой 100, то положение y плитки в вашей HorizontalGroup будет равно -50.

Я вижу два способа позиционирования плиток так, как вы этого хотите:

  1. Исправление выравнивания горизонтальной группы по низу: submitGroup.align(Align.bottom);
  2. просто установив положение y горизонтальной группы 25 вместо 0 ;

Комментарии:

1. Большое вам спасибо!!!! Я не знал, что выравнивание по умолчанию было Align.center . Но, center в соответствии со стадией?

2. Вы можете проверить исходный код HorizontalGroup 😉 На самом деле я только что выяснил, что существует метод bottom(), так что это тоже должно сработать: submitGroup.bottom();