Я делаю игру в реальном времени и хочу, чтобы пользовательский интерфейс был похож на Ages of Empires с пользовательским интерфейсом внизу. У меня возникают трудности с установкой фона таблицы, содержащей определенные элементы.
Я пробовал много вещей, например:
но ничего не работает. Я думаю, проблема в том, что я пытаюсь применить цвет фона к самой задней таблице, которая содержит другие таблицы. Я могу установить цвет для передних столов, но не для основного, заднего.
Здесь я рисую пользовательский интерфейс:
skin = new Skin(Gdx.files.internal("core/assets/skinComposerExport/uiskin.json"));
stage = new Stage(new ScreenViewport());
mainTable = new Table(skin);
unitInfoTable = new Table(skin);
unitSpecTable = new Table(skin);
className = new Label("Placeholder scnm", skin);
...
abilityCD = new Label("Placeholder acdn", skin);
mainTable.setPosition(Gdx.graphics.getWidth() / 2.0f, 0);
mainTable.center().bottom();
mainTable.setBackground("UI_background");
addLabelsToTable(unitInfoTable, className, hitPoints, mana, dmg, range);
addLabelsToTable(unitSpecTable, abilityName, abilityMana, abilityDmg, abilityRange, abilityCD);
mainTable.add(unitInfoTable).padRight(20);
mainTable.add(unitSpecTable);
stage.addActor(mainTable);
Я хочу, чтобы вся нижняя часть экрана была белой (около 200 пикселей в высоту и заполняла всю ось x) и рисовала на ней элементы, но не могу установить цвет фона.
Вы можете указать размер таблицы, чтобы ваша сцена знала, как правильно ее отобразить. (Или используйте setFillParent(true) во внешней таблице). Обычно я создаю root
таблицу размером со сцену, затем добавляю в эту root
таблицу дополнительные элементы scene2d, выравнивая их по мере необходимости.
Вот простой пример использования ShadeUI
@Override
public void create() {
stage = new Stage(new ScreenViewport());
batch = new SpriteBatch();
skin = new Skin(Gdx.files.internal("shadeui/uiskin.json"));
// create a root table, sized to our stage, and add it to the stage
Table root = new Table();
root.setBackground(skin.getDrawable("dialogRed"));
root.setSize(stage.getWidth(), stage.getHeight());
stage.addActor(root);
// now create our menu, bottom-aligned, filled to width, and add it to root
Table menu = new Table();
menu.setBackground(skin.getDrawable("dialogDim"));
root.add(menu).expand().bottom().fillX().height(50);
// add additional labels to the menu
menu.defaults().expandX().center().uniformX().uniformX();
menu.add(new Label("HP", skin));
menu.add(new Label("MP", skin));
menu.add(new Label("My Name", skin));
menu.add(new Label("My Class", skin));
}
@Override
public void render() {
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.begin();
stage.draw();
batch.end();
}
И вот как это выглядит, когда я запускаю его:
Большое спасибо! Я смог сделать это, указав размер таблицы.