Инди Марат Каджаев
906

Четверо в команде, не считая дедлайна

DTF, привет. Под катом сказ о разработке нашей первой мобильной игры.

В закладки
Аудио

Преамбула.
Хочу поделиться с вами аркадой под андроид и небольшими подробностями разработки. Немного о себе - я 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), что-то сами накидали в паинте.

draft

Игра технически очень простая - нам даже не нужно было использовать box2d(физ.движок), обработать коллизии и вычислить гипотенузу можно и самостоятельно. Из самых интересных моментов выделю следующие.

1. Изначально в игре все элементы генерировались рандомно. Т.е. у нас есть провайдеры чёрных дыр, ножниц, сюрикенов, стержней, сердец - суем их в массив, и потом берем рандомный провайдер и получаем элемент с рандомными координатами. Довольно быстро стало ясно, что этот подход "очень не очень", то же самое нам сказали знакомые, которые принимали участие в тестировании и посоветовали использовать шаблоны. Наверняка для тех, кто занимается геймдевом это является очевидным решением, но т.к. мы в этой сфере новички для нас это был очень дельный совет.

Таким образом появилось несколько шаблонов: долина ножниц; диагональные стержни - на высокой скорости довольно прикольно их собирать (вжух-вжух-вжух пальчиком); и ещё один шаблон, не знаю как его назвать - назову так, как называется класс в коде: StraightForwardPattern.

patterns

С шаблонами стало приятнее, но слишком предсказуемо, что ли. Поэтому ещё одним шаблоном стал тот самый рандом. Т.е. теперь у нас есть "статичные" шаблоны и один рандомный. (тут мем про идеальный баланс).

2. Основной проблемой, с которой мы столкнулись была вот в чем. LibGDX в бесконечном цикле вызывает метод render(float delta), в котором собственно и происходит вся отрисовка элементов. Линия карандаша у нас рисуется следующим образом: мы берем координаты пальца и помещаем туда текстуру. Так вот, когда мы вели пальцем по экрану очень быстро образовывались "дыры" потому что мы попадали в те милисекунды, когда метод render(delta) уже отработал и ещё не вызвался снова. Проблему решили довольно просто - запоминаем последнюю координату, в которой отрисовали текстуру, получаем следующую и если расстояние между ними больше X и палец при этом не отпускался - заполняем этот промежуток. Сначала думали, что этот вариант может не сработать - линии будут угловатыми, но опасения были напрасны - всё работает как надо.

Собственно, об игре.
Игровой процесс не претендует на уникальность, но вполне неплох и способен затянуть. Вы управляете карандашом, буквально рисуете на бумаге уклоняясь от препятствий - ножниц, сюрикенов, чёрных дыр. При этом стержень карандаша кончается и надо подбирать маленькие карандашики. На случай, когда стержень подходит к концу, а карандашей всё нет можно подобрать осколок зеркала. Он даст эффект на несколько секунд - вместо траты стержень будет восстанавливаться, но при этом управление становится зеркальным - ведёте влево, а карандаш рисует вправо. Ещё можно подобрать сердечко, которое позволит разок столкнуться с препятствием и остаться в живых. Чем дольше вести не отрывая палец от экрана тем выше будет комбо, которое увеличивает скорость набора очков. Плюс постепенно увеличивается скорость игры. Разве что корованы грабить нельзя.

game over

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

Буду благодарен, если установите (а вдруг понравится?), а за отзыв с рейтингом обещаю поставить свечку за ваше здоровье!
А ещё обещаю через недели две написать второй пост с получившимися результатами, блэкджеком и графиками.
Увидимся!

With love, Pencil Dash.

Материал опубликован пользователем. Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Марат Каджаев", "author_type": "self", "tags": [], "comments": 17, "likes": 23, "favorites": 16, "is_advertisement": false, "subsite_label": "indie", "id": 32673, "is_wide": false, "is_ugc": true, "date": "Mon, 03 Dec 2018 19:37:00 +0300" }
{ "id": 32673, "author_id": 91097, "diff_limit": 1000, "urls": {"diff":"\/comments\/32673\/get","add":"\/comments\/32673\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/32673"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 64960, "possessions": [] }

17 комментариев 17 комм.

Популярные

По порядку

Написать комментарий...
6

На мобилках не играю, но идея на мой взгляд прикольная.
Набросал вот минут за десять в качестве разминки скетч по мотивам вашей иконки в ГуглПлей.
Удачи вам!

Ответить
2

Блин, это очень круто! Спасибо :)

Ответить
4

Installs 10+

Добро пожаловать в бездну.

Ответить
3

Лично мне не кажется удачной метафора следа от карандоша.
До просмотра трейлера, чисто по вашему тексту, я думал, что след играет роль в геймплее (типа линия тоже чувствительна к столкновениям, как в классическом Xonix, например).
Оказалось что след вообще ни на что не влияет, только отвлекает внимание. Каждый раз, когда ножницы пересекают след, подсознательно ждешь чего-то, но ничего не происходит...
Длину линии как меру продвижения (очки) можно заменить на время до столкновения и будет то же самое.

В общем у вас самая обычная и примитивная avoider game, в которой я лично не вижу никаких фишек, которые могут привлечь игрока.

Ответить
1

Пожалуй скачаю, понравилась простыня текста.
Upd: поиграл - прикольно! Только вот выйти при нажатии назад не получается.

Ответить
1

Спасибо за отзыв! Насчёт выхода - в ближайшем обновлении исправим

Ответить
1

На свечку. А что такое рклм ?

Ответить
0

рклм - реклама, но сейчас она ещё не работает, судя по всему потому что надо набрать определенное кол-во установок

Ответить
1

Кнопки Выход в меню нет, обычная функция андроида "назад" не работает.
Геймплей никакой, но качество исполнения (для 1го проекта) хорошее.
Такое однозначное ощущение что все скачивания и отзывы за первые 3 дня на гуглплее сделаны друзьями))

Вопрос, что дальше?..

Ответить
0

Баг с кнопкой выход исправим в ближайшем обновлении)
Насчет геймплея - да, будем улучшать всеми способами!
Да, первые 2 дня игру скачивали почти только знакомые поэтому и почти все отзывы от них
Дальше будем улучшать исправлять ошибки и улучшать геймплей

Ответить
0

Серьезных ошибок там я не увидел, если верно понял суть игры.
Невозможность выхода - это да)) Шедеврально)) но это логическая недодумка.
Может еще паузу как то предусмотреть?... как - у меня нет идей.

Есть момент - запускал раз 10 - один раз сначала вылезла толпа ножниц - потом толпа карандашей (буквой Z как на одной картинке) - это очень странно... для нормальной игры, НЕ тестирования.

Но все равно - у этого проекта нет реальных путей развития. Как проба пера (вашей команды) - он хорош, да! Вы планируете еще что то другое дальше?

Ответить
0

Насчет паузы - у вас на правом верхнем углу не отображается кнопка паузы?
В любом случае добавим ещё интеграцию с google play services - лидерборд, ачивки и т.п. для опыта - следующих проектах приготится однозначно!
Да, есть идея, пока в стадии "обмозговывания" и описания на листе

Ответить
0

*в следующих проектах пригодится
**я пьян

Ответить
0

*в правом верхнем углу

Ответить
0

Игра прикольная но нуждается в доработках, потому что пустовата. О кстати:

В полную команду, энтузиастов, требуется кодер. Срочно. Взрослый умом, надёжный. Который сможет сразу же начать кодить. На Юнити. Задачи интересные, необычные. Игра не сложная. 2Д аркада-экшн в необычном сай-фай-био сеттинге.

Ответить
0

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjog" } } }, { "id": 10, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-250597-0", "render_to": "inpage_VI-250597-0-1134314964", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=clmf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudo", "p2": "ftjf" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvc" } } } ]
В Steam появилась функция продажи
подержанных цифровых копий игр
Подписаться на push-уведомления