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


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

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

ProGuard DexGuard и libGDX

Proguard и специальный для Android DexGuard являются оптимизаторами и обфускаторами Java и Android приложений. Они помогают повысить скорость выполнения кода, уменьшить размер приложения, затруднить анализ и понимание алгоритмов работы и модификацию при декомпиляции. Вы может использовать совместно Proguard и DexGuard в вашем libGDX приложении чтобы сделать его более сложным для декомпиляции сторонними лицами, чтобы уменьшить размер и повысить скорость выполнения. В данной статье рассматриваются Proguard правила для libGDX, также вам могут быть полезны правила конфигурации ProGuard для разных библиотек и фреймворков.

Следующий конфигурационный файл позволить libGDX приложению работать совместно с ProGuard

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"
    }
}