libGDX - фреймворк для разработки игр


libGDX – кроссплатформенный фреймворк для разработки игр и визуализации, основанный на языке программирования Java с некоторыми компонентами, написанными на C и C++ для повышения производительности определенного кода. В настоящее время поддерживает Windows, Linux, Mac OS X, Android, iOS и HTML5 как целевые платформы.

9-Patch изображения

Данная статья рассматривает 9-patch изображения, как их можно создать и как их использовать в контексте libGDX приложения.

Упаковщик текстур

В OpenGL привязывается текстура и делается визуализация, затем привязывается другая текстура и делается еще дополнительная визуализация и так далее. Привязывание текстуры является относительно дорогим, поэтому идеальным считается хранение большого числа маленьких изображений на одном большом изображении, привязывание один раз большой текстуры, а затем многократная визуализация отдельных частей. libGDX имеет класс TexturePacker, который представляет собой приложение командной строки для упаковки множества маленьких изображений в одно большое. Он хранит местоположение маленьких изображений, так что в приложении на них можно легко сослаться по имени, используя класс TextureAtlas.

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

Рефлексия

Для того, чтобы использовать рефлексию кроссплатформенный образом, libGDX предоставляет небольшую обертку вокруг API рефлексии Java. Данная обертка в основном состоит из двух классов, содержащих статические методы, которые вы будете вызывать для операций рефлекции:

  • ArrayReflection – инкапсулирует доступ к java.lang.reflect.Array.
  • ClassReflection – инкапсулирует доступ к java.lang.Class.

Другие классы, включенные в обертку, предоставляют доступ к конструкторам, методам и полям. Данные классы (по большей части) отражают их java.lang.reflect эквивалент и могут быть использованы таким же образом.

Гироскоп

Некоторые Android устройства имеют такой датчик как гироскоп, который предоставляет информацию о скорости вращения в радианах в секунду вокруг оси X, Y и Z для устройства.

Примечание: Гироскоп в настоящее время не доступен на устройствах с iOS, так как нет реализации в RoboVM.

Сначала вы должны включить гироскоп в вашей Android конфигурации. Как правило, в файле AndroidLauncher.java.

config = new AndroidApplicationConfiguration();
config.useGyroscope = true;  // по умолчанию false

// вы возможно захотите отключить датчики, которые включены по умолчанию, если они больше не будут нужны
config.useAccelerometer = false;
config.useCompass = false;

Запрос доступен ли гироскоп работает следующим образом:

boolean gyroscopeAvail = Gdx.input.isPeripheralAvailable(Peripheral.Gyroscope);

После того как вы определили, что гироскоп действительно доступен, вы можете опросить состояние:

if (gyroscopeAvail) {
    float gyroX = Gdx.input.getGyroscopeX();
    float gyroY = Gdx.input.getGyroscopeY();
    float gyroZ = Gdx.input.getGyroscopeZ();
}

libGDX 1.6.4

libGDX 1.6.4

Время нового релиза, а также появилась новая версия RoboVM. Подробнее об этом ниже.

  • TextField курсор и размер выделение изменены, смотрите коммит.
  • FreeTypeFontGenerator настройки для улучшения теней и границ.
  • ScrollPane плавная прокрутка когда область прокрутки намного больше чем полосы прокрутки.
  • TexturePacker сортирует страницы регионов по именам.
  • GlyphLayout перенос текста изменен чтобы не обрезать пустое пространство, смотрите коммит.
  • Исправление BitmapFont вычисления ширины пространства, когда используется отступ и нет пространства глифа в шрифте.
  • Исправление TextArea курсора и рисования выделенных позиций.
  • Исправление ActorGestureListener панорамирования и масштабирования когда актер вращается или масштабируется.
  • Исправление TextField для отображения не пикселей.
  • Для Label допускается установка многоточия строки.
  • AssetManager получает перехват для обработки сбоя при загрузки.
  • TextField теперь вызывает событие ChangeEvent когда изменяется текст, можно тоже отменить.
  • Добавлены всплывающие подсказки к scene2d.ui.
  • Обновлен RoboVM до версии 1.5

Как всегда обновите проект, также обновите RoboVM Eclipse или IntelliJ IDEA плагин до версии 1.5.0!

Наконец RoboVM выпустили RoboVM Studio для Mac OS X, отличный способ делать кросс-платформенные приложения.

libGDX 1.6.3

libGDX 1.6.3

Новый релиз, вот изменения:

  • Обновлен RoboVM до версии 1.4.0.

Как всегда обновите проект, также обновите RoboVM Eclipse или IntelliJ IDEA плагин до версии 1.4.0!

libGDX 1.6.2

libGDX 1.6.2

Время нового релиз, вот изменения:

  • API Изменение: TiledMap ImageLayer теперь использует для позиционирования float вместо int.
  • API Изменение: добавлен GLFrameBuffer и FrameBufferCubemap: Framebuffer теперь наследуется от GLFramebuffer, смотрите #2933.

Как всегда обновите проект, также обновите RoboVM Eclipse или IntelliJ IDEA плагин до версии 1.3.0!

Говоря про RoboVM, теперь реализовано избегание компилятором генерации кода, который никогда не используется. Это делает ваше приложение намного меньше. Также это означает, что время компиляции теперь более быстрое, так что время итерации ниже! Смотрите подробнее о релизе RoboVM 1.3.

libGDX 1.6.1

libGDX 1.6.1

Этот релиз содержит значительные изменения в системе сборки. iOS нативные библиотеки, например, gdx код, freetype, bullet или box2d теперь упаковываются с использованием RoboVM Jar схемы для нативных библиотек. Статические библиотеки хранятся внутри jar файла в директории META-INF/robovm/ios/libs. Кроме того, небольшой файл robovm.xml хранится в META-INF/robovm/ios/robovm.xml, этот файл описывает нативные библиотеки в libs директории которую должен связать RoboVM.

Если вы обновили существующий проект до версии libGDX 1.6.1, то вам нужно сделать несколько изменений в build.gradle и ios/build.gradle файлах вашего проекта!

В корневом build.gradle файле для iOS проекта вы увидите что-то подобное:

project(":ios") {
    apply plugin: 'java'
    apply plugin: 'robovm'

    configurations { natives }

    dependencies {
        compile "org.robovm:robovm-rt:${roboVMVersion}"
        compile "org.robovm:robovm-cocoatouch:${roboVMVersion}"
        compile project(":core")
        compile "com.badlogicgames.gdx:gdx-backend-robovm:$gdxVersion"
        natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-ios"
    }
}

libGDX 1.6.0

libGDX 1.6.0

Время нового релиза

  • API Изменение: GlyphLayout xAdvances теперь с дополнительной записью в замом начале. Это было необходимо для реализации плотной границы текста #3034
  • API Изменение: Label#getTextBounds изменен на getGlyphLayout.
  • API Изменение: BitmapFont метрики теперь принимают во внимание отступы #3074.
  • API Изменение: метод PixmapPacker.generateTextureAtlas(…) теперь возвращает атлас, который может быть обновлен последующим вызовом PixmapPacker.updateTextureAtlas(…).
  • API Изменение: метод FreeTypeFontGenerator.generateFont(…) теперь работает с предоставленным пользователем PixmapPacker.
  • Добавлены DirectionalLightsAttribute, PointLightsAttribute и SpotLightsAttribute, удалены Environment#directionalLights/pointLights/spotLights, добавлен Environment#remove, свет теперь стал таким же как и другие атрибуты. Смотрите также https://github.com/libgdx/libgdx/wiki/Material-and-environment#lights
  • Добавлена ​​возможность извлечения аннотации метода к Reflection API.
  • Добавлена ​​возможность упаковать "анонимные" pixmaps в PixmapPacker, которые появится в сгенерированной текстуре, но не в сгенерированном или обновленном TextureAtlas.
  • Добавлен метод PixmapPacker.updateTextureRegions().
  • Добавлен метод ​​PixmapPacker.packDirectToTexture().
  • Добавлен метод AnimatedTiledMapTile.getFrameTiles().
  • В 2D ParticleEditor все точки диаграммы можно перетаскивать сразу, удерживая клавишу Ctrl. Точки можно тянуть пропорционально, удерживая Ctrl-Shift.
  • В 2D ParticleEditor добавлена ​​кнопка Merge для объединения загруженного файла эффекта частицы с текущем открытым эффектом частицы.
  • Обновление обертки Bullet до версии 2.83.

Убедитесь, что RoboVM Eclipse плагин обновлен до версии 1.2.0! Теперь также существует RoboVM IntelliJ IDEA плагин!

Смотрите статью о том, как обновить libGDX проект до последней версии. Текущая версия libGDX "1.6.0", текущая nightly версия "1.6.1-SNAPSHOT". Вы можете посетить страницу версий с описанием всех деталей версий зависимостей.