Использование scene2d.ui с libgdx: откуда берется скин?

Я читал об особенностях libgdx scene2d, включая элементы пользовательского интерфейса, но не могу заставить их работать. Кажется, все они используют объект скина, как его создать?

Я прошел хороший урок, который создает простую игру libgdx, ловя капли дождя в ведре, и я создал простое приложение для настольных игр, загружая изображения с текстурным атласом. Тем не менее, scene2d звучит как лучший способ управления движущимися частями в приложении для настольных игр, а также любыми кнопками и меню.

2 ответа

Решение

Чтобы загрузить обложку, вы можете начать с образцов файлов обложки, используемых в тестовом проекте libgdx.

  1. Атласпак Файл
  2. Json File
  3. Изображение Atlaspack
  4. Файл шрифта

В этом вопросе есть немного больше деталей, и я обнаружил, что мне пришлось переместить файлы в подкаталог ресурсов, чтобы избежать ошибки в HTML-версии. (Если я оставляю файлы в папке ресурсов, я вижу сообщение об ошибке типа "GwtApplication: исключение: ошибка чтения файла data/uiskin.json.")

Я опубликовал полный пример, который отображает одну кнопку, и интересный код - все в игровом классе. Пример настолько прост, что вам нужны только две переменные-члены для хранения сцены и кнопки.

private Stage stage;
private TextButton button;

Чтобы создать скин, вы просто загружаете файл данных.

Skin skin = new Skin(Gdx.files.internal("data/uiskin.json"));

Подключите кнопку на сцену.

stage = new Stage();
button = new TextButton("Click Me!", skin);
stage.addActor(button);

Подключите слушателя к кнопке и зарегистрируйте сцену для получения событий.

button.addListener(new ClickListener() {
    @Override
    public void clicked(InputEvent event, float x, float y) {
        button.setText("Clicked!");
    }
});
Gdx.input.setInputProcessor(stage);

render() Метод в основном вызов stage.draw(),

Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

stage.act(Math.min(Gdx.graphics.getDeltaTime(), 1 / 30f));
stage.draw();

Тогда вам просто нужно расположить экран, когда он изменит размер.

button.setPosition(
        (width-button.getWidth())/2, 
        (height-button.getHeight())/2);

Если ваш экран более сложный, подумайте об использовании таблицы.

Если вы хотите использовать другой шрифт, вы можете сгенерировать файл шрифта и файл изображения, используя Hiero. После того, как вы это сделаете, вам нужно будет взять новое изображение шрифта и использовать TexturePacker для перепаковки его с другими ресурсами скина.

Теперь Libgdx предоставляет Git-репозиторий для получения скина, вы можете скачать его с: https://github.com/libgdx/libgdx-skins, скопировать ресурсы: https://github.com/libgdx/libgdx-skins/tree/master/skins/visui/assets для вашего проекта

Другие вопросы по тегам