Я использую встроенную библиотеку UI библиотеки libgdx, чтобы создать пользовательский интерфейс в моей игре. Мне интересно, как я могу нарисовать 2 изображения (или актеров) в таблице один на другой? Я смотрю на подобное, как LayerDrawable в Android. Есть ли какие-нибудь вещи, чтобы это сделать?Libgdx: место 2 актера один на другом
ответ
В этих библиотеках библиотеки libGDX есть Stack.
UPDATE: если вы хотите разместить один виджет поверх другого виджета, и эти виджеты имеют разный размер, вы должны обернуть меньший виджет. Что-то вроде:
//First add actual content
stack.add(content);
//Second add wrapped overlay object
Table overlay = new Table();
overlay.add(overlayWidget).expand().fillX().bottom().left();
stack.add(overlay);
stack
переменных является экземпляром класса Stack
Это фактический отрывок из моего проекта. Вы должны настроить его для своего дела.
Вы можете использовать нечто подобное:
//create stage
stage = new Stage(new StretchViewport(game.width, game.height));
//create table
Table table = new Table();
table.setSize(game.width,game.height); //fullscreen
//add Image 1
table.add(new Image(game.skin.getDrawable("image1")));
//add Image 2 (create new col)
table.add(new Image(game.skin.getDrawable("image2"))).width(xx).height(xx);
//add new row
table.row();
//add Image 3 - padding to draw over image1/2 && colspan
table.add(new Image(game.skin.getDrawable("image3"))).width(xx).height(xx).padTop(-50f).colspan(2);
//add table to stage
stage.addActor(table);
/*
* Add action
*
*/
@Override
public void render(float delta) {
...
//don't forget to draw ur stage
stage.act(delta); // or stage.act(Gdx.graphics.getDeltaTime())
stage.draw();
}
Также вы можете добавить действие на постановку/таблицы или изображения и т.д. ...:
stage.addAction(Actions.sequence(
Actions.fadeOut(0.0001f),
Actions.fadeIn(0.5f),
Actions.delay(0.1f),
Actions.run(new Runnable() {
@Override
public void run() {
//mmmm new screen
dispose();
game.setScreen(new BoobsScreen(game));
}
})));
Конечно, вы можете привлечь больше, чем изображение: кнопку, текстовую кнопку, ярлык и т. д. или добавьте scrollPane для таблицы, но прежде, чем взглянуть на Skin on libgdx Например, программно девятикратный текстовый текст:
private NinePatch processNinePatchFile(String fname) {
final Texture t = new Texture(Gdx.files.internal(fname));
final int width = t.getWidth() - 2;
final int height = t.getHeight() - 2;
return new NinePatch(new TextureRegion(t, 1, 1, width, height), 3, 3, 3, 3);
}
//create skin
skin = new Skin();
...
//create font
...
//create ninepatch button from android/assets/style/button
NinePatch ninepatch = processNinePatchFile("style/button.9.png");
skin.add("button.9", ninepatch);
//create textbuttonstyle
TextButton.TextButtonStyle textButtonStyle = new TextButton.TextButtonStyle();
textButtonStyle.font = skin.getFont("font_black_38");
textButtonStyle.fontColor = Color.DARK_GRAY;
textButtonStyle.up = skin.getDrawable("button.9");
skin.add("buttonTextStyle", textButtonStyle);
//now you can create textbutton
TextButton btn = new TextButton("Hello", game.skin.get("buttonTextStyle", TextButton.TextButtonStyle.class));
//add a clicklistener
btn.addListener(new ClickListener(){
@Override
public void clicked(InputEvent event, float x, float y) {
//mmmmmm add action for exemple
stage.addAction(Actions.sequence(Actions.fadeOut(0.5f), Actions.run(new Runnable() {
@Override
public void run() {
//dispose and load screen
dispose();
game.setScreen(new MoreBoobsScreen(game));
}
})));
}
});
table.add(btn);
Чтобы создать bitmapfont взгляните на Gdx freetype, он очень прост в использовании.
- 1. (LibGDX) Изменение цвета актера
- 2. Перемещение актера LibGDX
- 3. libgdx - дождаться завершения действия актера
- 4. Libgdx салфетки жест через актера
- 5. анимация актера в libgdx аварии на Iphone
- 6. libgdx - ClickListener не влияет на масштаб актера?
- 7. LibGdx - Увеличить сенсорную область актера
- 8. Animate добавления актера в libgdx
- 9. Как назвать актера в libgdx?
- 10. LibGdx - Место Актер вне сцены
- 11. Два актера в ячейке внутри таблицы (libGDX)
- 12. Как сохранить актера внутри сцены в libgdx?
- 13. LibGDX Обработка щелчка отдельной части актера
- 14. Libgdx: как присоединить актера к повернутой группе
- 15. libgdx - события ввода актера не срабатывают
- 16. LibGDX Изменение высоты стола после добавления актера
- 17. SpriteBatch установлен ниже уровня Актера в libgdx
- 18. LIBGDX- получает положение актера внутри таблицы
- 19. Libgdx Scene2d - добавление дополнений актера (TextField)?
- 20. LibGdx Каков правильный способ копирования актера?
- 21. Получить актера по имени в libgdx
- 22. как место div на другом div
- 23. Как изменить свойства актера LibGdx на событие хита
- 24. Libgdx отображение текста/оценка как актера на сцене
- 25. Как использовать растровый шрифт в качестве сцены 2-го актера?
- 26. 2 выберите запрос в другом массиве на объекте один JSon
- 27. Получить позицию экрана изображения (или актера) в Libgdx Stage
- 28. Какое место для размещения экрана libgdx
- 29. libGDX: краски и удалить цвет из Актера с touchDragged
- 30. LIBGDX MoveToAction.setPosition() в отрицательные координаты для перемещения актера вне сцены
Благодарим вас за anser! Я нашел этот виджет, но кажется, что он просто рисует 2 актера один на другой без какой-либо возможности изменить размер детей. Как я заметил, это изменяет размер всех детей на один максимальный размер одного из детей. Позвольте мне объяснить, что я хочу делать. У меня 2 изображения. Один квадрат, а второй - круг. Квадрат составляет около 80x80 px, а круг - 20x20 пикселей. Я хочу рисовать в правом верхнем углу площади. Как я могу разместить таких актеров в виде виджета Stack? –
Я не знал, что наличие обертки для виджета различного размера в стеке - это то, как он работал! +1 :) Для справки вы можете использовать Контейнер вместо таблицы в качестве обертки –