Всем привет! Сказ о разработке нашей первой игры.
Преамбула.
Хочу поделиться с вами аркадой под андроид и небольшими подробностями разработки.
Немного о себе — я 3й год как Java программист в сфере энтерпрайза (кто знает, тот поймёт) и честно сказать последнее время стало скучно. Работа превратилась в рутину и не доставляет ни капли удовольствия. Поэтому в данный момент я взял перерыв, а чтобы за время перерыва не атрофировались пальцы решил попробовать другую сферу — геймдев. А именно мобильный геймдев, для начала Android, т.к. знаю джаву.
О нас.
В короткие сроки собралась небольшая команда из 4х человек (включая меня): разработчики 2шт, геймдизайнер 1шт, звукарь 1шт.
Т.к. опыта в сфере геймдева ни у кого в команде не было и время моего отдыха ограничено решили реализовать несложный проект, который точно доведем до конца. Таки довели! Изначально дедлайн был 15 ноября, но, как известно, закончить проект в изначально установленный срок — грех. Поэтому мы его закончили двумя неделями позже.
По тех. стеку это: Java 8 и libGDX. libGDX выбрали потому что:
1) опять таки Java
2) большое сообщество, много информации
3) кроссплатформенность (под iOS собирать еще не пробовали, но попробуем)
О разработке.
Началом разработки можно назвать 17 октября. В общей сложности мы потратили 45 дней, за которые:
а) научились работать с libGDX;
б) написали код;
в) нарисовали графику;
г) сделали музыку;
У тех, кто уже видел игру может возникнуть вопрос — почему так долго, игра же простая? Да, это правда и если быть совсем точным, то на саму разработку (написание кода) ушло от силы недели полторы. Остальное время можно поделить между:
а) освоением движка
б) рисованием картинок, а потом их перерисовки
в) написание музыки
г) поиском звуков на https://freesound.org
д) чтением кучи статей о том, как продвигать игры
Плюс были моменты «простоя» по разным причинам — у кого-то экзамен, у кого-то пересдача и т.п. На «простой» можно смело отдать полторы недели, а то и больше.
Ещё часть времени ушла на «дебаты»: идеи о том, что добавить в игру приходили чуть ли не каждый день, поэтому были споры о том, что «это будет лишним», «это не впишется» и т.п. Таким образом мы отказались от многих идей, например добавить бегающих тараканов, которых можно давить и получать за это доп. очки:
Вообще, одна из самых сложных вещей, на мой взгляд, это определиться заранее с тем, что будет в игре и придерживаться этого плана не пытаясь добавить «ещё одну» фичу.
Вот таким образом и набрались эти 45 дней.
Прототип игры был готов спустя полторы недели. В этот период графики у нас толком еще не было, поэтому что-то мы взяли из открытого доступа (например фоновый лист бумаги мы одолжили у Doodle Jump), что-то сами накидали в паинте.

Игра технически очень простая — нам даже не нужно было использовать box2d(физ.движок), обработать коллизии и вычислить гипотенузу можно и самостоятельно. Из самых интересных моментов выделю следующие.
1. Изначально в игре все элементы генерировались рандомно. Т.е. у нас есть провайдеры чёрных дыр, ножниц, сюрикенов, стержней, сердец — суем их в массив, и потом берем рандомный провайдер и получаем элемент с рандомными координатами. Довольно быстро стало ясно, что этот подход «очень не очень», то же самое нам сказали знакомые, которые принимали участие в тестировании и посоветовали использовать шаблоны. Наверняка для тех, кто занимается геймдевом это является очевидным решением, но т.к. мы в этой сфере новички для нас это был очень дельный совет.
Таким образом появились несколько шаблонов: долина ножниц; диагональные стержни — на высокой скорости довольно прикольно их собирать (вжух-вжух-вжух пальчиком); и ещё один шаблон, не знаю как его назвать — назову так, как называется класс в коде: StraightForwardPattern.

С шаблонами стало приятнее, но слишком предсказуемо, что ли. Поэтому ещё одним шаблоном стал тот самый рандом. Т.е. теперь у нас есть «статичные» шаблоны и один рандомный. (тут мем про идеальный баланс).
2. Основной проблемой, с которой мы столкнулись была вот в чем. LibGDX в бесконечном цикле вызывает метод render(float delta), в котором собственно и происходит вся отрисовка элементов. Линия карандаша у нас рисуется следующим образом: мы берем координаты пальца и помещаем туда текстуру. Так вот, когда мы вели пальцем по экрану очень быстро образовывались «дыры» потому что мы попадали в те милисекунды, когда метод render(delta) уже отработал и ещё не вызвался снова. Проблему решили довольно просто — запоминаем последнюю координату, в которой отрисовали текстуру, получаем следующую и если расстояние между ними больше X и палец при этом не отпускался — заполняем этот промежуток. Сначала думали, что этот вариант может не сработать — линии будут угловатыми, но опасения были напрасны — всё работает как надо.
Собственно, об игре.
Игровой процесс не претендует на уникальность, но вполне неплох и способен затянуть. Вы управляете карандашом, буквально рисуете на бумаге уклоняясь от препятствий — ножниц, сюрикенов, чёрных дыр. При этом стержень карандаша кончается и надо подбирать маленькие карандашики. На случай, когда стержень подходит к концу, а карандашей все нет можно подобрать осколок зеркала. Он даст эффект на несколько секунд — вместо траты стержень будет восстанавливаться, но при этом управление становится зеркальным — ведёте влево, а карандаш рисует вправо. Ещё можно подобрать сердечко, которое позволит разок столкнуться с препятствием и остаться в живых. Чем дольше вести не отрывая палец от экрана тем выше будет комбо, которое увеличивает скорость набора очков. Плюс постепенно увеличивается скорость игры. Разве что корованы грабить нельзя.

Изначально игру мы планировали назвать Karan Dash (карандаш, ахах, поняли да?), но позже передумали и остановились на Pencil Dash. Мотивацией стало то, что эта изящная (ящетаю) игра слов будет понятна только русскоязычной аудитории.
Игру мы выпустили пару дней назад и сейчас занимаемся продвижением. В этом опыта тоже ни у кого в команде нет, все знания о продвижении мы почерпнули из разных статей. Опубликовали информацию о игре на разных сайтах\форумах бесплатно. Из платных же каналов — заказали рекламу на 4пда, у одного блогера, несколько постов в пабликах ВК и AdMob. К слову данный пост тоже является частью продвижения, поэтому оставляю здесь ссылку на игру.
Страница игры в Google Play: щёлк
Буду благодарен, если установите (а вдруг понравится?), а за отзыв с рейтингом обещаю поставить свечку за ваше здоровье!
А ещё обещаю через недели две написать второй пост с получившимися результатами, блэкджеком и графиками.
Увидимся!

Последние обновления