Моя первая игра под Android

image

В 2012-м году я таки купил телефон на платформе android, это был аппарат Acer Liquid Metal S120. Поигравшись с аппаратом, и поиграв в разные игры, возникло желание написать свою игру. Поскольку я люблю лабиринты, изучил все возможные игры в данном жанре, но так и не нашел достойного кандидата. Решено – делаем лабиринт! Осталось дело за малым – продумать концепцию, выбрать движок и инструментарий, настроить среду разработки, нарисовать графику, сочинить музыку и написать код.

Концепция


Игровой мир представлен в 2D, вид сбоку, как в старых, добрых платформерах 90-х годов. Главный герой – подросток мальчуган по имени Джек, который заблудился в лабиринтах, и ищет выход. По пути к выходу он собирает бонусы в виде монеток и драгоценных камней. Чтобы усложнить задачу – было добавлены противники (тупые зомби, с полным отсутствием интеллекта, блуждающие от стенки до стенки), а так же двери и ключи.

Выбор движка и инструментов


Поскольку я имею некоторый опыт программирования на Java, в качестве движка был выбран andengine. Он идеально подходит для реализации 2d-игр. К плюсам можно отнести открытость проекта. Единственный, на мой взгляд, недостаток – отсутствие официальной документации, что сполна покрывается наличием богатых примеров и отзывчивым сообществом на официальном форуме. В ходе разработки выяснилось, что одного движка недостаточно. Так как лабиринты нужно придумать и нарисовать возникла потребность в редакторе уровней. В поскольку выбор был невелик – выбрал Tiled Map Editor. Объективных причин было 3:

  • он удобен
  • поддержка andengine из коробки
  • проект активно развивается


Среду разработки выбрал eclipse, я к нему привык да и официальный инструментарий разработки от google на тот момент был заточен именно под эту IDE. Так же было решено использовать систему контроля версий SVN, поскольку удалось сколотить небольшую команду в виде второго разработчик и музыканта, а так же художника. Когда речь зашла о музыке – было решено отказаться от mp3 в пользу трекерной музыки, что не очень обрадовало музыканта. Но он успешно освоил OpenMPT и музыка получилась весьма приятная.

Графика


Изначально я хотел сделать 3d графику, отсчитанную в 2d. Но в ходе реализации пришлось отказаться от этой идеи. Первые наброски персонажа были выполнены в 3d и выглядели следующим образом:

image

Позже я попробовал сделать анимацию:

image

Но в итоге у меня не получилось сделать красивого окружения в 3d, не хватало опыта. Я пробовал искать художников, но ничего хорошего из этого не вышло. И я взялся за пиксели, и вот что из этого вышло:

image image image image

Весь геймплей выполнен в растровом редакторе, выведен с душой пиксель за пикселем:

image

Логотип, игровые заставки, и прочие элементы навигации, сделали в векторе, тут я подключил мастерство моей жены (она — классный художник):

image

Написание кода


Тут все оказалось весьма не сложно, писать под android – одно удовольствие. К интересным моментам можно отнести:

  • алгоритм поиска пути, в моем случае это был метод волны.
  • алгоритм расчета очков
  • интеграция системы scoreloop.
  • Интеграция с системы обработки багрепортов bugsense.
  • Ну и конечно продумывание и реализация навигации в геймплее.


Результат


Опубликовали приложение в google play 29-го мая, и уже имеем где-то 500-600 загрузок в день, на мой взгляд это весьма неплохой результат. На текущий момент в игре реализовано 3 сета по 15 уровней. Планируем нарисовать ещё больше уровней, и ввести новых противников. Но сейчас у нас встала первоочередная задача — анализ и исправление багов, а их у нас оказалось достаточно (от части вызвано разношерстностью android устройств). В частности пришлось пересобрать нативную часть под intel и mips, уменьшить текстурные атласы до 1024 пикселей.

Буду рад ответить на любые вопросы.
Tags:
android, gamedev, andengine, pixelart

You can't comment this post because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author's username will be hidden by an alias.