libgdx учебник
Начало работы с libgdx
Поиск…
Версии
Установка или настройка
LibGDX имеет довольно простую настройку с помощью простой Java-программы. Вы можете скачать здесь . Когда вы запускаете приложение, оно будет выглядеть примерно так:
Примечание. Этот снимок экрана был сделан в Linux и показывает путь, который отличается от установки Windows. Однако форма одинакова на любой ОС, совместимой с этим приложением настройки
Ящики ввода
В поле ввода «Имя» указано название игры для вашего проекта. Поле ввода «Пакет» - это пакет для вашего основного класса. Поле ввода «Класс игры» - это основной класс, который вызывается при запуске вашей игры. Поле ввода «Место назначения» - это место назначения, в котором будет создан ваш проект. В поле ввода «Andriod SDK» указан путь к вашему Android-файлу. Это поле ввода полностью необязательно, поэтому, если вы не хотите развернуть приложение на Android, вам не нужно беспокоиться об этом.
Подпроекты
Субпроекты - это только платформы, на которые нужно будет развертывать. Эта часть довольно понятна. Если вы не хотите развернуть его в HTML, просто снимите флажок.
расширения
Расширения являются официальными расширениями LibGDX. Вот таблица, рассказывающая вам, что каждый из них:
Имя расширения | Описание |
---|---|
пуля | Bullet представляет собой трехмерную систему обнаружения столкновений и динамическую библиотеку динамических тел. |
Freetype | Freetype позволяет использовать шрифты .ttf, вместо того, чтобы использовать шрифты Bitmap |
инструменты | Позволяет реализовать вывод средств LibGDX. |
Контроллеры | Позволяет реализовать контроллеры, такие как контроллеры XBox 360. |
Box2D | Физическая библиотека для 2-х игр. |
Box2dlights | Позволяет легко добавлять мягкие динамические огни в физическую игру. |
Ashley | Крошечная структура сущности |
искусственный интеллект | Структура искусственного интеллекта. |
Вы можете добавить сторонние расширения, но их данные или имена здесь не отображаются.
продвинутый
В разделе «Дополнительно» вы можете установить несколько параметров и создать дополнительные файлы проектов для Eclipse и IDEA IDE.
Имя параметра | Описание |
---|---|
URL-адрес зеркала Maven | Заменяет Maven Central на предоставленный URL Maven |
IDEA | Создает файлы проекта Intellij IDEA |
Затмение | Создает файлы проекта Eclipse |
Автономный режим | Не заставляйте загружать зависимости |
поколение
После правильной настройки всех ваших настроек вы можете нажать кнопку «Создать». Это может занять пару секунд, но оно будет генерировать основные файлы, а Gradle - для вашего проекта. Как только вы закончите с этим, пришло время импортировать проект в вашу среду IDE.
LibGDX Hello World
основы
Сгенерированные проекты содержат базовое приложение Hello World, подобное уже реализованное.
Основной проект - это основной проект, содержащий весь независимый от платформы код. Это обязательно, но на основе настроек вашего поколения у вас может быть несколько проектов для каждой выбранной вами платформы.
Пример
Откройте com.mygdx.game.MyGdxGame.java
в core
проекте. Вы увидите следующий код:
public class MyGdxGame extends ApplicationAdapter {
SpriteBatch batch;
Texture img;
@Override
public void create () {
batch = new SpriteBatch();
img = new Texture("badlogic.jpg");
}
@Override
public void render () {
Gdx.gl.glClearColor(1, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.begin();
batch.draw(img, 0, 0);
batch.end();
}
@Override
public void dispose () {
batch.dispose();
img.dispose();
}
}
Хотя это ваш основной проект, вы не будете его выполнять напрямую, вам всегда нужно запустить платформенный Launcher, для рабочего стола он называется com.mygdx.game.desktop.DesktopLauncher.java
в проекте desktop
.
public class DesktopLauncher {
public static void main (String[] arg) {
LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
new LwjglApplication(new MyGdxGame(), config);
}
}
В этом классе вы можете установить настройки для конкретной платформы.
Запуск игры
Eclipse и Intellij используют два разных метода для запуска вашего проекта. Найдите IDE, используя ниже.
Запуск с использованием Eclipse
Используя eclipse, вы можете запустить приложение, запустив этот класс как Java-приложение (щелкните правой кнопкой мыши по проекту -> Запустить как -> Java-приложение). Вы увидите следующее окно:
Работа с использованием Intellij Idea
В Intellij вам нужно будет выполнить конфигурацию запуска. Чтобы сделать это, вы должны нажать кнопку в правом верхнем углу, которая выглядит как морковка вниз:
Затем нажмите кнопку «Изменить конфигурации ...». Вам будет представлен экран всех ваших текущих конфигураций запуска. Нажмите «+» в левом верхнем углу окна и выберите «Приложение». Оттуда выберите файл «DesktopLauncher» для опции «Основной класс», установите параметр «Использовать путь к модулю» к основному параметру и установите «Рабочий каталог» в папку «Свойства» в вашей основной папке. Конечный продукт должен выглядеть примерно так:
Как только вы это сделаете, вы можете выбрать имя для своей конфигурации запуска и нажать «Применить», затем «ОК». Как только вы закончите с этим, вы можете щелкнуть значок зеленого запуска в правом верхнем углу:
Что происходит в классе MyGdxGame?
Сначала вызывается метод create
, который инициализирует пакет, который рисует на экране. Затем метод загружает badlogic.jpg в память.
После этого метод render
вызывается повторно до тех пор, пока приложение не будет остановлено. Этот метод сбрасывает цвет фона на красный и рисует изображение на экране. Как вы можете видеть, вам всегда нужно начинать и заканчивать пакетный чертеж. Наконец , когда приложение пытается остановить dispose
метод вызывается, что освободит место в памяти , используемой текстуры и партии.
(Хорошо знать, что утилизация может произойти и во время работы на других платформах, например Android, поскольку Android может освобождать пространство памяти, когда приложения находятся в фоновом режиме, но это более сложная тема)
Примечание. Если вы получаете ошибку при запуске, как показано ниже, проверьте этот вопрос для ответа!
Файл не найден: badlogic.jpg (Внутренний)
Общий обзор LibGDX
LibGDX - бесплатная библиотека разработки игр с открытым исходным кодом, разработанная на Java. Цели - позволить пользователям разрабатывать кросс-платформенные игры, которые запускаются на настольных компьютерах, Android, iOS и веб-браузерах. Напишите код один раз, разверните его на любой из основных платформ.
Добавление поддержки для кода, специфичного для платформы
LibGDX разработан таким образом, что вы можете написать один и тот же код и развернуть его на нескольких разных платформах. Тем не менее, есть моменты, когда вы хотите получить доступ к конкретному коду платформы. Например, если у вас есть рейтинги и достижения в вашей игре, вы можете использовать инструменты для платформы (например, Google Play Games) в дополнение к их локальному хранению. Или вы хотите использовать базу данных или что-то совершенно другое.
Вы не можете добавить этот код в основной модуль. Итак, первый шаг - создать интерфейс. Создайте его в основном модуле. Это первая утилита для управления другими интерфейсами:
public interface PlatformWrapper{
//here you can also add other things you need that are platform specific.
//If you want to create your own file saver for an instance, a JSON based database,
//achievements, leaderboards, in app purchases and anything else you need platform specific code for.
SQLWrapper getSQLSaver();//This one will be used in this example
AchievementWrapper getAchievementHandler();//this line is here as an example
}
Затем нам нужно создать второй интерфейс - SQLWrapper. Это также входит в основной модуль.
public interface SQLWrapper{
void init(String DATABASE);
void saveSerializable(int id, Object o);
Object loadSerializable(int id, Object o);
void saveString(int id, String s);
//.... and other methods you need here. This is something that varies
//with usage. You may not need the serializable methods, but really need a custom method for saving
//an entire game world. This part is entirely up to you to find what methods you need
//With these three methods, always assume it is the active database in question. Unless
//otherwise specified, it most likely is
String getActiveDatabase();
void deleteDatabase();
void deleteTable(String table);//delete the active table
}
Теперь вам нужно войти в каждый проект и создать класс для реализации PlatformWrapper и один для реализации SQLWrapper. В каждом проекте вы добавляете необходимый код, например экземпляры, конструкторы и т. Д.
После того, как вы переопределили все интерфейсы, которые вы сделали, убедитесь, что у всех у них есть экземпляр класса, который реализует PlatformWrapper (и что есть геттер). Наконец, вы меняете конструктор в основном классе. Основной класс - это класс, который вы ссылаетесь на пусковую установку. Он либо расширяет ApplicationAdapter, реализует ApplicationListener, либо расширяет Game. Отредактируйте конструктор и добавьте PlatformWrapper в качестве аргумента. Внутри оболочки платформы у вас есть некоторые утилиты (если вы добавили их) в дополнение ко всем другим оберткам (sql, достижениям или другим добавленным вами).
Теперь, если все правильно настроено, вы можете позвонить в PlatformWrapper и получить любой из кросс-платформенных интерфейсов. Вызовите любой метод и (при условии, что выполненный код верен), который вы увидите на любой платформе, он делает то, что он должен делать с конкретным кодом платформы
Менеджер активов
AssetManager - это класс, который помогает вам управлять своими активами.
Во-первых, вам нужно создать экземпляр:
AssetManager am = new AssetManager();
После того, как это будет инициализировано, и перед тем, как что-либо сделать, вы хотите получить ресурсы:
am.load("badlogic.jpg", Texture.class);//Texture.class is the class this asset is of. If it is a
//sound asset, it doesn't go under Texture. if it is a 3D model, it doesn't go under Texture.class
//Which class added depends on the asset you load
//... other loading here ...//
//when finished, call finishLoading:
am.finishLoading();
Теперь, когда вы чувствуете, что получаете badlogic.jpg
:
Texture texture = am.get("badlogic.jpg");
//Ready to render! The rendering itself is in the normal way
Использование AssetManager позволяет загружать их один раз в память AssetManager, а затем получать их столько раз, сколько вы хотите.
Зачем использовать AssetManager? (из вики ):
AssetManager (код) помогает вам загружать и управлять вашими активами. Это рекомендуемый способ загрузки ваших активов из-за следующих хороших поведений:
- Загрузка большинства ресурсов выполняется асинхронно, поэтому вы можете отображать экран реактивной загрузки во время загрузки
- Активы подсчитываются. Если два актива A и B зависят от другого актива C, C не будет удаляться до тех пор, пока не будут выбраны A и B. Это также означает, что если вы загружаете актив несколько раз, он будет фактически разделен и будет занимать память только один раз!
- Единственное место для хранения всех ваших активов.
- Позволяет прозрачно реализовывать такие вещи, как кеши (см. FileHandleResolver ниже)
График 2D-сцены
Когда вы начнете работу с Java или Android, вы быстро узнаете, что (0,0) находится в верхнем левом углу. Однако в LibGDX (0,0) по умолчанию находится в нижнем левом углу.
Используя ортографическую камеру, вы можете получить (0, 0) в верхнем левом углу. Хотя по умолчанию (0, 0) находится в нижнем левом углу. Это то, что важно знать, так как он также изменяет, какой угол текстур имеет координаты X и Y.