РАЗРАБОТКА КРОССПЛАТФОРМЕННОЙ ИГРЫ НА ЯЗЫКЕ ПРОГРАММИРОВАНИЯ JAVA С ИСПОЛЬЗОВАНИЕМ ФРЕЙМВОРКА LIBGDX: РАЗРАБОТКА КОНЦЕПТА, АНИМАЦИИ И ПРЕДСТАВЛЕНИЯ - Студенческий научный форум

X Международная студенческая научная конференция Студенческий научный форум - 2018

РАЗРАБОТКА КРОССПЛАТФОРМЕННОЙ ИГРЫ НА ЯЗЫКЕ ПРОГРАММИРОВАНИЯ JAVA С ИСПОЛЬЗОВАНИЕМ ФРЕЙМВОРКА LIBGDX: РАЗРАБОТКА КОНЦЕПТА, АНИМАЦИИ И ПРЕДСТАВЛЕНИЯ

Черноусова Ю.А. 1, Каримова Р.Ф. 1
1Саратовский национальный исследовательский государственный университет имени Н.Г. Чернышевского
 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF
ВВЕДЕНИЕ

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

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

LibGDX – кроссплатформенный фреймворк для разработки игр и визуализации, основанный на языке программирования Java. В настоящее время поддерживает такие платформы как: Windows, Linux, Mac OS X, Android, iOS и HTML5 [1].

LibGDX позволяет писать код только для одной платформы, а затем разворачивать игру или приложение на нескольких платформах без модификации. Данный фреймворк поддерживает язык программирования Java. С помощью фреймворка libGDX можно с легкостью реализовывать такие задачи, как: визуализация спрайтов, построение пользовательских интерфейсов, проигрывание звуковых эффектов и музыки, линейная алгебра и тригонометрические вычисления, разбор JSON и XML, и так далее [2].

Первая глава посвящена теоретическим сведениям о выбранном фреймворке. Во второй главе содержатся сведения о проделанной работе, в частности, о концепции и реализации игры «Lykoi-cat».

ГЛАВА 1. ТЕОРЕТИЧЕСКАЯ ЧАСТЬ

  1.  
    1. Преимущества и возможности libGDX

LibGDX - это java-фреймворк, предоставляющий кроссплатформенный API для разработки игр и приложений. Основными преимуществами данного фреймворка являются, во-первых: кроссплатформенная разработка для Android, iOS, Windows, Linux и HTML5 (32 или 64 бита) [3], во-вторых: написание кода и тестирование на персональном компьютере и удобное разворачивание на Android, iOS, чистом JavaScript, Applets или как обычное Desktop-приложение.

Работа с графикой осуществляется посредством OpenGL ES [4] 1.0, 1.1 и 2.0 на всех платформах. Также для работы с графикой в libGDX предоставляются низкоуровневые возможности, такие как:

  • Массивы вершин (vertex arrays)

  • Текстуры

  • Текстурные атласы (подробная информация о текстурах и атласах представлена в параграфе 1.4)

  • Объекты буферизации кадров

  • Шейдеры (программы для визуального определения поверхности объекта. Это может быть описание освещения, текстурирования, постобработки и т.п.[5])

  • Автоматическое отслеживание потери OpenGL-контекста

Для работы с высокоуровневой 2D-графикой предусмотрены следующие возможности:

  • Рендеринг спрайтов с пакетированием (Batch) и кэшированием

  • Битовые шрифты

  • Визуализация тайловых карт (подробная информация о тайловых картах представлена в параграфе 2.2)

Для работы с высокоуровневой 3D-графикой libGDX также предлагает свои преимущества:

  • Загрузчики моделей формата .OBJ и .MD5

  • Покадровая и скелетная анимация

  • Ортогональная и перспективная камера

Средства данного фреймворка также позволяют легко работать с аудио, например: воспроизводить музыку и звуковые эффекта из файлов форматов .WAV, .MP3 и .OGG.

LibGDX предоставляет возможности считывания разнообразного ввода информации, например: доступ к мыши, клавиатуре, а также к прикосновениям к сенсорному экрану; доступ к компасу и акселерометру; поддержка вибратора; обработка событий удаленного ввода, который позволяет подключить android-устройство к приложению на компьютере.

Данный фреймворк также упрощает работу с математикой и физикой в интерактивных приложениях и играх. В нём предусмотрены классы векторов и матриц для линейной алгебры при работе с 2D-графикой и 3D-графикой, также можно с легкостью просчитать перекрывания и пересечения даже сложных фигур.

Стоит заметить, что libGDX позволяет производить оптимизацию кода, поскольку присутствует возможность нативного кода для повышения быстродействия на критических участках [2].

  1.  
    1. Обзор модулей

LibGDX включает в себя несколько модулей, которые предоставляют сервисы для каждой ступени в архитектуре игры или приложения. Ниже представлены все модули данного фреймворка:

  1. Ввод - предоставляет модель ввода и обработчик для всех платформ.

  2. Графика - позволяет отображать изображения на экране, используя аппаратную реализацию OpenGL ES.

  3. Файлы - предоставляет удобные методы для операций чтения и записи данных, посредством абстрактного файлового доступа на всех платформах

  4. Аудио - облегчает запись и воспроизведение звука на всех платформах.

  5. Сеть - предоставляет методы для выполнения сетевых операций, таких как HTTP GET/POST запросы, и коммуникации между TCP сокетами сервера и клиента [2].

Ниже представлена диаграмма, на которой изображена взаимосвязь основных модулей libGDX в простой игре:

Далее будут рассмотрены подробнее все модули и работа с ними.

Ввод: Модуль ввода в libGDX дает возможность делать опрос различных состояний ввода на каждой платформе.

Следующий фрагмент кода получает текущие координаты прикосновения или курсора мыши, если было соответствующее событие.

if (Gdx.input.isTouched()) {

System.out.println("Input occurred at x=" +

Gdx.input.getX() + ", y=" + Gdx.input.getY());

}

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

Графика: Модуль графики в libGDX абстрагирует взаимодействие с графическим процессором и предоставляет удобные методы для получения обертки экземпляра OpenGL.

Например, следующий код получает экземпляр OpenGL API 1.0:

GL10 gl = Gdx.graphics.getGL10();

Метод getGL10() возвращает экземпляр, который можно использовать для рисования на экране. Стоит заметить, что если заменить число «10» на «20», то будет получен экземпляр OpenGL API 2.0. В случае если аппаратная конфигурация не поддерживает OpenGL ES v1.0, то метод возвратит ноль.

Следующий фрагмент очищает экран и закрашивает его красным цветом.

gl.glClearColor(0.1f, 0.0f, 0.0f, 1);

gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

Метод всегда вызывает конкретную реализацию API (LWJGL, JOGL или Android), поэтому приложению не нужно знать о каких либо особенностях, и такие методы будут работать на всех поддерживающихся платформах [3].

Модуль графики также предоставляет методы для генерации изображений и текстур, которые будут подробно рассмотрены в параграфе 1.4.

Файлы: Модуль файлов в libGDX предоставляет единый доступ к файлам, независимо от платформы. Запись файлов имеет некоторые ограничения, связанные с безопасностью платформы. Наиболее распространенное использование модуля файлов - это загрузка asset-ресурсов игры (текстур, звуков и других используемых файлов) для всех платформ, из той же поддиректории приложения.

Следующий пример загружает текстуру из файла, расположенного в $APP_DIR/assets/textures директории.

Texture myTexture =

new Texture(Gdx.files.internal(“assets/texture/image.png”));

Модуль файлов представляет мощный абстрактный слой, так он работает на Windows, Linux, Mac OS и Android.

Аудио: Модуль аудио в libGDX делает загрузку и воспроизведение аудио файлов предельно простыми, а также предоставляет возможность прямого доступа к звуковому оборудованию [3].

Звуки загружаются в память и могут быть воспроизведены в любое время. В игре они идеально подходят для звуковых эффектов, которые используются несколько раз (например, взрыв или выстрел).

Музыка, в отличие от звуков, представляет потоковое воспроизведение из файла на диске или SD карты. Каждый раз, когда воспроизводиться файл с музыкой, аудио-оборудованию передается поток из файла.

Следующий фрагмент кода воспроизводит звуковой файл с диска, в половину от максимальной громкости.

Music music =

Gdx.audio.newMusic(Gdx.files.getFileHandle(

"data/music_file.mp3", FileType.Internal));

//установка громкости в промежутке [0, 1f]

music.setVolume(0.5f);

//начать воспроизведение

music.play();

//указываем, что воспроизведение файла надо повторять

music.setLooping(true);

Как уже говорилось ранее, он поддерживает такие форматы, как .WAV, .MP3 и .OGG.

  1.  
    1. Архитектура игры на основе scene2D

Пакет scene2D в libGDX представляет собой классы для реализации двухмерной сцены, которые могут быть полезны для управления группой иерархически связанных актеров (сущностей) [6]. Ниже будут рассмотрены преимущества данного пакета.

Во-первых, с помощью scene2D осуществляется вращение и масштабирование группы объектов. Дочерние объекты работают в своей системе координат, так что родительские преобразования для них прозрачны.

Во-вторых, данный пакет упрощает 2D-рендеринг изображения. Каждый объект существует в своей не вращаемой и не скалируемой системе координат, где (0,0) - нижний левый угол объекта.

В-третьих, scene2D имеет очень гибкую систему событий, которая позволяет обрабатывать события родителя перед или после обработки событий дочерних объектов.

Но у данного пакета также есть и недостаток, который заключается в том, что объекты совмещают и модель, и представление. Такое сцепление логики не позволяет полноценно использовать MVC (Model-View-Controller). Но в некоторых случаях это может быть полезно и удобно.

Главной особенностью scene2D является то, что у него есть три центровых класса: Stage, Group и Actor.

Класс Stage (сцена) имеет «корневую» группу (т.е. класс Group), куда приложение может добавлять своих актеров. У класса Stage есть своя камера и упаковщик спрайтов (SpriteBatch). Stage отсылает события дочерним элементам и реализует интерфейс InputProcessor, который предназначен для считывания событий ввода [6].

Класс Group является актером, который может содержать в себе других актеров. Вращение и масштабирование группы соответствующим образом отражается на его дочерних актерах. Класс Group делегирует рисование и события ввода соответствующим дочерним актерам. Он превращает координаты событий ввода так, что дочерние элементы получают эти координаты в своей собственной системе координат.

Класс Actor представляет собой некоторая сущность, которая может быть нарисована и которая может обрабатывать события ввода. Актер имеет позицию, размер, информацию о масштабе, вращение и родительский компонент (origin). Также актер может иметь имя, что позволяет найти его по этому имени - это может быть полезно при отладке [7].

Чтобы использовать абстрактные классы Stage, Group, Actor нужно их расширить и переопределить методы для рисования, определение нажатий и т.д. Об использование данных классов из пакета scene2D будет подробно рассказано во второй главе.

  1.  
    1. Работа с графическими компонентами

При написании игр больше всего времени тратится именно на работу с графикой. В данном параграфе будет рассмотрено, как правильно работать с графикой (текстурами, регионами, атласами и т.д.) в libGDX.

Текстура – двумерное изображение, хранящееся в памяти компьютера или графического акселератора в одном из пиксельных форматов. В случае хранения в сжатом виде на дисках компьютера текстура может представлять собой битмап (от англ. binary map – двоичная карта), который можно встретить в форматах bmp, jpg, gif и т.д. [5].

Спрайт – растровое изображение, свободно перемещающееся по экрану. По своей сути, спрайт – это проекция объекта на плоскости. В 2D-графике это реализуется без проблем, но при работе с 3D-графикой при изменении угла обзора происходит разрушение иллюзии. Если представить себе стену в игре, то когда камера смотрит на неё прямо – всё в порядке, но если посмотреть на неё сбоку – камера увидит лишь линию.

Текстурный атлас – большое изображение, которое содержит много изображений меньшего размера, каждое из которых является текстурой для какой-то части объекта. Такие «подтекстуры» можно накладывать путём указания текстурных координат на атласе, то есть, выбирая только определённую часть изображения. В приложениях, в которых часто используются мелкие текстуры, более эффективно хранить текстуры в текстурном атласе, так как это позволяет сократить количество смен состояний до одного для всего атласа, уменьшает количество занятых текстурных слотов, а также минимизируется фрагментация видеопамяти. Чаще всего изображения, которые содержатся в атласе, имеют одинаковый размер, поэтому рассчитать их координаты не составит труда.

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

Ниже будет рассмотрена работа с классом SpriteBatch.

public class Game implements ApplicationListener {

private SpriteBatch batch;

//вызывается при создании игры

public void create() {

batch = new SpriteBatch();

}

//вызывается при отрисовке

public void render() {

// Очистка экрана

Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

batch.begin();

// Здесь происходит процесс рисования

batch.end();

}

...

}

Как можно было заметить, процесс рисования происходит между методами .begin() и .end(), вызванными у экземпляра класса SpriteBatch.

Класс Texture декодирует файл изображения и загружает его в память графического процессора. Файл изображения должен располагаться в assets директории.

Ниже будет рассмотрен пример работы с текстурой:

private Texture texture;

// ...

texture = new Texture(Gdx.files.internal("image.png"));

// ...

batch.begin();

batch.draw(texture, 10, 10);

batch.end();

Созданная текстура передается в SpriteBatch для отрисовки. Текстура будет нарисована в прямоугольнике с позицией (10,10) и шириной и высотой равными размеру текстуры. SpriteBatch имеет много методов для отрисовки текстур, он может растягивать изображение, обрезать его, переворачивать и т.д.

При работе с графикой в libGDX также используется класс TextureRegion, который описывает прямоугольник внутри текстуры и полезен при рисовании только части текстуры [9].

private TextureRegion region;

// ...

texture = new Texture(Gdx.files.internal("image.png"));

region = new TextureRegion(texture, 20, 20, 50, 50);

// ...

batch.begin();

batch.draw(region, 10, 10);

batch.end();

Здесь (20, 20, 50, 50) описывают часть текстуры, которая затем рисуется в прямоугольнике с позицией (10,10). Класс SpriteBatch имеет много методов для рисования регионов текстуры.

ГЛАВА 2. ПРАКТИЧЕСКАЯ ЧАСТЬ 2.1 Концепция игры «Lykoi-cat»

"В деревне N в полнолуние всегда происходили странные вещи: животные начинали необычно себя вести, птицы падали замертво, пропадали люди... Но в этот день луна светила ярче, чем обычно. В полночь многие люди начинали чувствовать безудержную жажду и голод, но дальше было хуже - прикончив все запасы пищи, люди начали нападать сначала на животных, а потом и на других живых людей. В то время, пока деревня была охвачена страхом и хаосом, один человек взглянул через окно на полную луну и обнаружил в себе необычную способность..." – гласит вступление игры «Lykoi-cat».

Главный персонаж игры – оборотень-ликой (Ликой - естественная мутация домашней короткошерстой кошки, с которой животное имеет внешний вид оборотня). Цель главного героя – выбраться из деревни, которая наполнена озверевшими людьми. При нажатии на определенную клавишу персонаж может применить свою способность, изменив свой облик из человека в кота и обратно. На рисунке 1 представлен скриншот игры «Lykoi-cat».

Рисунок 1 - Скриншот игры «Lykoi-cat»

В обличие человека ликой может использовать найденное оружие (рисунок 2) и тем самым убивать врагов с определенного расстояния, а не только с помощью ближнего боя.

Рисунок 2 - Игрок с оружием

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

На рисунках 3 и 4 представлен игрок, который в данный момент находится в обличии кота.

Рисунок 3 - Игрок в обличье кота

Рисунок 4 - Игрок в обличье кота

Персонаж первоначально имеет десять жизней, которые уменьшаются с каждым ударом зомби.

2.2. Реализация игры «Lykoi-cat»

Было поставлено несколько задач: придумать сюжет игры, создать ее архитектуру и сделать реализацию, совместно работая в команде из двух человек.

Требование к игре: использование фреймворка libGDX и системы автоматической сборки Gradle. Реализация должна быть написана на языке программирования Java в интегрированной среде разработки Intellij IDEA.

Ниже (рисунок 5) представлено дерево проекта. Далее о некоторых из этих классов будет рассказано подробно.

Рисунок 5 - Иерархия проекта «Lykoi-cat»

Пакеты, с которыми мы оперируем – это android, core и desktop. В пакете core должны находиться все необходимые классы, работа с графикой, отображением и т.д. В пакетах android и desktop содержатся только запускаемые классы AndroidLauncher и DesktopLauncher соответственно. Такая структура позволяет всю логику содержать в пакете core, и запускать её через AndroidLauncher или DesktopLauncher, в зависимости от того, на каком устройстве будет запущено приложение. В папке android/assets содержатся дополнительные файлы (шрифты, текстуры, карты и т.д.).

КлассMyGame наследуется от Game (класс из фреймворка libGDX). В нем происходит запуск игры. При первом запуске срабатывает метод create, в нем assetManager загружает карту TiledMap, о которой будет подробнее рассказано ниже. Полный код класса MyGame будет представлен в Приложении А (см. приложенный диск).

publicclassMyGame extendsGame { ... @Override publicvoidcreate () { assetManager.setLoader(TiledMap.class, new TmxMapLoader(new InternalFileHandleResolver())); ... setScreen(new LoadScreen(this)); //устанавливаем на главный экран

//LoadScreen(экран загрузки игры) } ...

}

В классе LoadScreenзадается камера и Viewport (отображаемая часть мира в камере). Класс Cameraработает как настоящая камера реального мира. В отношении камеры можно: перемещать ее, вращать ее, увеличивать и уменьшать масштаб, менять область просмотра. Использование камеры это простой способ перемещения вокруг игрового мира, без необходимости ручной работы с матрицами [10]. Все операции с матрицами проекции скрыты в реализации.

В данной игре миром является большой прямоугольник 1280x720 пикселей, а окно просмотра (Viewport) составляет 640x360 пикселей. Поэтому в LoadScreen, GameScreen и World будут заданы одинаковые константы WORLD_WIDTH и WORLD_HEIGHT.

public class LoadScreen implements Screen { private static final float WORLD_WIDTH = 1280; private static final float WORLD_HEIGHT = 720;

private static final float PROGRESS_BAR_WIDTH = 100; private static final float PROGRESS_BAR_HEIGHT = 25; final MyGame game;public OrthographicCamera cam; Viewport viewport;

... @Override public void show() { cam = new OrthographicCamera();

//задаем ортографическую камеру

//устанавливаем позицию камеры в середине мира cam.position.set(WORLD_WIDTH/2, WORLD_HEIGHT/2, 0);

//устанавливаем позицию камеры в середине мира cam.update(); //обновляем камеру viewport = new FitViewport(WORLD_WIDTH / 2, WORLD_HEIGHT/2,

cam);

//задаем viewport shapeRenderer = new ShapeRenderer();

//загружаем карту из AssetManager game.getAssetManager().load("maps/map_lykoi_1.3.tmx",

TiledMap.class);

} ... }

В классе GameScreen происходит аналогичная ситуация, только там загружаются текстуры и карта, а также создается мир (World). Полный код классов LoadScreen и GameScreen будет представлен в Приложении Б (см. приложенный диск).

Подробнее рассмотрим создание карты Tiled Map, которую можно создать с помощью программы Tiled Map Editor [10] (рисунок 6). В данной программе очень легко создать карту, предварительно нарисовав тайлы (небольшие одинаковые квадраты 8x8, 16x16, 32x32 и т.д.), а также задать коллизии.

Рисунок 6 - Карта игры в программе Tiled Map Editor

В классе World(который является сценой) происходит основная логика и взаимодействие между актерами. В конструкторе класса World сразу задается местоположение персонажа, а также генерируются зомби в некотором количестве (определенном zombieCount):

this.player = new Player(new Vector2(860, 1390), this);addActor(player); //добавление актераgenerateZombie(zombieCount, ZombieType.NORMAL);generateWeapon(Weapon.GUN);...

//генерациязомбиprivate void generateZombie(int count, ZombieType zombieType) { for (int i = 0; i < count; i++) { addActor(zombieType.choseZombie(this, CAMERA_WIDTH, CAMERA_HEIGHT)); }}

Также в World устанавливается карта, которая была загружена в assetManager.

privatevoidsetMap() { tiledMap=

game.getAssetManager().get("maps/map_lykoi_1.3.tmx");orthogonalTiledMapRenderer = new

OrthogonalTiledMapRenderer(tiledMap, 1f);

//устанавливаем просмотр карты orthogonalTiledMapRenderer.setView(cam);orthogonalTiledMapRenderer.setMap(tiledMap); }

Полный код класса World, а также остальных классов из пакета model будет представлен в Приложении А (см. приложенный диск).

Далее рассмотрим анимацию персонажей. Анимация состоит из множества кадров, которые показываются в последовательности через определенные интервалы времени. Для этого создаются изображения, которые называются спрайт-листами [11] (рисунок 7).

Рисунок 7 - Спрайт-лист персонажа

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

private static final int FRAME_ROWS = 12;

TexturewalkSheet;

if (haveGun) { //если у персонажа есть пистолет устанавливаем одну текстуру walkSheet = new Texture(Gdx.files.internal("men_with_gun.gif"));} else {//иначе устанавливаем другую walkSheet = new Texture(Gdx.files.internal("men_all.gif"));}

TextureRegion[][] tmp = TextureRegion.split(walkSheet, walkSheet.getWidth(),

walkSheet.getHeight() / FRAME_ROWS); //делим спрайт-лист на 12 равных частей

walkDownFrames = new TextureRegion[2];walkUpFrames = new TextureRegion[2];walkLeftFrames = new TextureRegion[2];walkRightFrames = new TextureRegion[2];int indexD = 0;int indexU = 0;int indexR = 0;int indexL = 0;for (int i = 1; i < 3; i++) { walkDownFrames[indexD++] = tmp[i][0]; //устанавливаем текстуры для хода вниз walkUpFrames[indexU++] = tmp[i + 3][0]; //устанавливаем текстуры для хода вверх walkRightFrames[indexR++] = tmp[i + 6][0]; walkLeftFrames[indexL++] = tmp[i + 9][0];}walkDownAnimation = new Animation(0.25f, walkDownFrames);

//0.25f – время показа одного спрайта анимацииwalkUpAnimation = new Animation(0.25f, walkUpFrames);walkLeftAnimation = new Animation(0.25f, walkLeftFrames);walkRightAnimation = new Animation(0.25f, walkRightFrames);

Рассмотрим отрисовку перемещения персонажа на одном из методов:

float stateTime;

TextureRegion currentFrame;

public void walkRight(Batch batch){

//getDeltaTime() - возвращает время, прошедшее между последним и текущим кадром

//в секундах. stateTime += Gdx.graphics.getDeltaTime();

//получаем ключевой кадр, который должен показываться в это время currentFrame= (TextureRegion) walkRightAnimation.getKeyFrame(stateTime, true); batch.draw(currentFrame, x, y); //выводим на Batch текущий спрайт}

Аналогичная ситуация происходит и с анимацией зомби. Полный код классов AnimatorMen и AnimatorZombie представлен в Приложении В (см. приложенный диск).

ЗАКЛЮЧЕНИЕ

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

В ходе проделанной работы мы научились использовать данный фреймворк, изучили его возможности и особенности. С помощью фреймворка libGDX и системы автоматической сборки Gradle мы разработали кроссплатформенную игру «Lykoi-cat» для Android-устройств и ПК на языке программирования Java. Также мы научились слажено работать в команде и верно распределять задачи между членами команды.

СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ
  1. James Cook. LibGDX Game Development By Example. – UK: Packt Publishing, 2015. – 2 c.

  2. LibGDX [Электронный ресурс] URL: http://www.libgdx.ru/ (дата обращения: 08.09.2017 г.)

  3. LibGDX | Suvitruf [Электронный ресурс] URL: http://suvitruf.ru/libgdx/ (дата обращения: 08.09.2017 г.)

  4. OpenGL ES Overview – The Khronos Group Inc [Электронный ресурс] URL: https://www.khronos.org/opengles/ (дата обращения: 12.09.2017 г.)

  5. Современная терминология 3D-графики [Электронный ресурс] URL: http://www.ixbt.com/video2/terms2k5.shtml (дата обращения: 12.09.2017 г.)

  6. Перевод туториалов по libGDX – часть 3 (пакет scene2d) / Хабрахабр [Электронный ресурс] URL: https://habrahabr.ru/post/143479/ (дата обращения: 12.09.2017 г.)

  7. Scene2D. libgdx/libgdx Wiki [Электронный ресурс] URL: https://github.com/libgdx/libgdx/wiki/Scene2d (дата обращения: 12.09.2017 г.)

  8. Full libGDX Game Tutorial – Scene2D – Game Development [Электронный ресурс] URL: https://www.gamedevelopment.blog/full-libgdx-game-tutorial-scene2d/ (дата обращения: 21.09.2017 г.)

  9. Казуальные игры на libGDX, тонкие моменты в разработке / Хабрахабр [Электронный ресурс] URL: https://habrahabr.ru/post/246185/ (дата обращения: 21.09.2017 г.)

  10. Tiled Map Editor | A generic tile map editor [Электронный ресурс] URL: http://www.mapeditor.org/ (дата обращения: 09.10.2017 г.)

  11. LibGDX Tutorial 3B: Simple Animation [Электронный ресурс] URL: http://www.gamefromscratch.com/post/2013/12/09/libgdx-tutorial-3b-simple-animation.aspx (дата обращения: 10.10.2017 г.)

Просмотров работы: 226