- Мой опыт: 4ре рабочих месяца (реально это растянулось на полтора года)
- Уровень подготовки читателя: новичок
- Темы о которых я попытаюсь рассказать в этой статье: как я к этому пришёл, мотивация, как сделать простой дизайн самому, немного про SEO в Google Play и одна затерявшаяся среди этого всего мысль про локализацию.
Здравствуйте, меня зовут %%username и я тоже пишу мобильные игры
Всё началось с Unigine Open Air 2012, я туда поехал с друзьями, пишущими игры, надеясь просто хорошо провести время (провёл), но когда вокруг
Суперплан
План выработался практически сразу:
- Пишем самую простую игру, выкладываем её в маркет, развлекаемся (кодим, рисуем, переводим, оптимизируем, добавляем социализацию).
- Берем опыт (и немного кода) из предыдущего пункта, переписываем геймплей — и вуаля у нас другая игра.
- ...
- С пунктом после троеточия всем всё ясно.
В данный момент я где-то в конце первого пункта. Но меня никак не отпускает, и постоянно хочется что-нибудь ещё немножко вот тут дописать, дорисовать, поменять.
В качестве запасного варианта к плану я решил, что такой опыт лишним в любом случае не будет.
Дзен и мотивация
Мотивация странная штука, у всех она своя. Но мне кажется общая суть мотивации в том, что если вы можете обмануть себя (обманывать других — нехорошо, а себя — самое оно!) и объяснить, почему нужно потратить этот солнечный день на кодинг вместо катания на велосипеде — обманывайте! Даже если объяснение далеко от логики — это не беда.
Про то, откуда брать время
Смотрите, если позволить себе пилить своё приложение по субботам, вот каждую субботу 8мь часов целенаправленно садиться и делать! То получается что в год у вас 52 рабочих дня набежит. А это уже 2.5 рабочих месяца! Давайте предположим, что мы ещё немножко вечерами думаем про приложение и архитектуру, и увеличим это время до 3.5 месяцев в год. Уже неплохо, а теперь финт ушами и подумаем о том, насколько мы продуктивны, когда пишем своё приложение и когда работаем на дядю? Оооок, какой у вас коэффициент получился? 1? 1.5? а может все 2?
Про трубу (или куда тратить время)
Представьте, что ваши пользователи — вода, которая течет по трубе. А ваша цель сделать так, чтобы через трубу протекало как можно больше воды. И, допустим, каждое улучшение, которое вы делаете, даёт вам увеличение этого потока на 10% (что вполне реально, допустим одно улучшение — один рабочий день). Так вот, есть у нас в начале 1 пользователь в день, а мы хотим 1000, спрашивается сколько улучшений нужно сделать всего? 1,1^x = 1000, итого x — 72 улучшения за 72 рабочих дня. (Вот наши 3.5 месяца и пригодились).
А всякие неудачи — вроде улучшил проект, а 10% не выиграл, можно объяснять тем, что труба имеет куски разных диаметров, и возможно вы улучшили не самое узкое место. Или почему совсем нет пользователей — так ты трубу не достроил, какие тебе пользователи? Во всех отношениях приятная модель для самообмана.
Про общение
Очень важно найти кого-то кто будет вас подбадривать и кто тоже увлечен этой же темой (мобильной разработкой). У меня под боком сидит товарищ, который успешно пилит свои игры, и с которым мы часто обсуждаем самые разнообразные странные вещи, которые узнаём про платформу, про психологию пользователей и прочее. Это очень сильно помогает не забросить это увлечение.
Про ошибку выжившего
Помните про неё. Читайте не только success story, но и просто отчёты вроде моего, и тем более — отчеты товарищей которые провалились. И только тогда делайте выводы.
Про приложения за пару вечеров
Я часто слышу про “приложение на коленке за пару вечеров” и это очень демотивирует. Я не знаю таких людей лично, но знаю других, которые потратили много месяцев, прежде чем приложение начало приносить нормальные деньги. Это меня мотивирует. (учитывая, что потратил я уже около 4х месяцев).
Про покупку иконки
Я жоплюсь тратить деньги (тем более, что я ничего особенно не жду от тестового проекта). Это странная штука, когда ты потратил дофига времени, которое стоит кучу денег (ну ладно, опыт всё-таки получил взамен), но не можешь купить иконку или перевод или заказать дизайн. Если у вас есть такая фигня — нужно с ней бороться, ну или хотя бы как-то учитывать. Это не дело, когда вы рисуете убогую иконку тратя на это больше времени (и денег в его эквиваленте), чем если бы вы заказали иконку у дизайнера. Вообще, разработка приложения похожа на игру. В игре, важно заставить игрока сделать маленькую покупку как можно раньше, потому что как только пользователь сделает хоть одну покупку, он будет тратить деньги намного легче. Так и тут — купите иконку, а дальше будет легче.
Все люди разные опять же, кто-то вбухивает дофига своего времени, кто-то денег.
P.S. Многие мысли вроде этих приходили в голову как некое просветление — потому я и назвал эту часть статьи “дзен и мотивация”.
Про дизайн
Как я уже говорил, я жоплюсь, поэтому расскажу как я сделал хоть какой-то дизайн самостоятельно.
- Для начала гуглим картинки по теме и находим какую-нибудь в нескольких цветах, которая нам нравится.
- Берем из неё набор цветов (желательно чтобы цветов было не много).
- Поскольку рисовать мы не умеем (как минимум я не умею) — плоский дизайн это наш выбор.
- Поначалу я думал найти какой-нибудь векторный редактор, чтобы всё в нём рисовать, а потом уже экспортить в png и использовать в приложении. В итоге оказалось, что мне вполне достаточно документа “Рисунок” в google docs и соответственно его возможностей работы с векторными объектами (привет товарищу который нарисовал дизайн iOS 7 в Wordе) — там как раз оказался объект похожий на бублик (нолик) и векторный знак умножения (крестик). Кнопка тоже была нарисована вначале в этом же редакторе и потом экспортнута в png.
Вот что получилось:
Текстура фона тоже рисовалась в google docs, а потом множилась и поворачивалась в Paint.NET.
В итоге получилось нечто такое:
Оба варианта на мой неискушенный взгляд оказались вполне приемлемыми. Чего и вам желаю.
Замечание по поводу кнопки ещё такое — чуть позже я узнал, что всё-таки android позволяет рисовать немного векторных объектов нативно — они называются Shape и позволяют нарисовать вот как раз такую кнопку с закругленными краями, границей и даже градиентом. Создаёте такой Shape в папке drawable, а потом используете в качестве фона у кнопок или других объектов.
Анимация
Чтобы было чуть-чуть интереснее — на каждый ход я сделал анимацию (тоже нативная штука в android).
Эффекты следующие:
- проявление (смена альфы от полностью прозрачного до непрозрачного),
- появление (ресайз из точки в крестик или нолик),
- поворот вокруг оси (вертикальной или горизонтальной — ресайз по одной оси до нуля с центром в центре симметрии крестика или нолика потом обратный ресайз),
- поворот вокруг центра (только для крестика).
Давайте разберемся на примере поворота вокруг оси X.
Добавляем файл overx.xml в res/anim папку проекта со следующим содержанием:
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator">
<scale
android:fromXScale="1.0"
android:toXScale="0.0"
android:fromYScale="1.0"
android:toYScale="1.0"
android:pivotX="50%"
android:pivotY="50%"
android:duration="125"
android:repeatCount="1"
android:repeatMode="reverse"
></scale>
</set>
- pivot — означает центральную точку относительно которой производится scale
- repeatCount — 1 — означает, что анимация выполнится один раз и после этого будет 1 повтор
- repeatMode — reverse — означает что повторная анимация будет выполнена в обратном порядке — то есть вернет все изменения сделанные первоначальной анимацией обратно
Надеюсь остальные параметры совсем не вызовут вопросов.
Вызов непосредственно этой анимации происходит так:
Button button = (Button)findViewById(R.id.button);
Animation anim = AnimationUtils.loadAnimation(this, R.anim.overx);
button.startAnimation(anim);
Я создал пул анимаций для крестиков и для ноликов отдельно и использовал их в случайном порядке. Так вот выяснилось, что не стоит использовать один и тот же объект Animation для анимации разных изображений. Для меня это как-то оказалось неочевидным. И я поимел немного непонятных проблем.
Иконка
Иконка — очень важна (но я от смены иконок изменения количества скачек не заметил).
Эволюция иконки:
Рисуется в любом редакторе :)
Любой редактор + вот такой генератор кнопочек (там свои ограничения, но вполне себе пользуемо).
Вот у этих товарищей есть триальный 3d редактор. Можно было конечно 3ds Max, но мне показалось что дольше буду разбираться.
Была мысль, что выделюсь черным фоном и мою иконку заметят… но нет.
Тут произошли кардинальные изменения в приложении. Ачивки были убраны и вместо них появилась система подсчета рейтинга (что символизирует кубок) на основе скорости реакции игрока и таблица рекордов. Я нашёл другой редактор иконок, в котором больше возможностей делать всякие впуклые иконки и прочее, но в итоге иконка такая же по выпуклостям как и была на второй картинке.
Всё-таки плоский дизайн.
Про локализацию
Похоже времена когда достаточно было сделать перевод приложения на корейский, чтобы его начали бешенно качать прошли (по крайней мере для крестиков-ноликов). Я думаю это потому, что раньше был шанс практически сразу по запросу оказаться одним из первых — сейчас уже нет.
Вся одна полезная мысль про локализацию у меня такая: идём на xda developers форум, мониторим ветку где выкладывают свои приложения разработчики и пишем им мол, давай я твоё приложение переведу на русский, а ты моё — на свой родной язык. Но нужно конечно вначале прикинуть, чтобы не оказалось что переводить чужое приложение придется день, а у вас всего пару строчек для перевода. Я написал 6ым, откликнулись 2ое, перевод пока что мы сделали так только с одним товарищем, опыт вполне приятный, даже не смотря на то, что мне пришлось раза в три больше перевести чем товарищу. Но с другой стороны — одним хорошим приложением больше в русском маркете.
Про SEO
Всё что ниже будет относиться не к топам, а к поиску по ключевому слову “Крестики нолики”.
Так как же подняться повыше?
- В первую очередь на положение влияет количество скачек.
- Звездочки тоже как-то влияют, но я пока не понял как. Я думаю как минимум пользователи будут неохотно качать приложение с низким рейтингом. Чтобы получить звёздочки — делаем напоминание пользователям в приложении порейтить и переход в Google Play.
- Самое интересное — название приложения. Тут поподробнее.
- При прочих равных “Крестики нолики” по запросу “Крестики нолики” будет выше чем “Крестики нолики онлайн”. Даже больше, если у вас приложение называется “Крестики нолики” вы обойдете многих товарищей даже с бОльшим количеством скачек.
- Google Play подсказывает после набора “Крестики нолики” в поиске другие популярные варианты, например “Крестики нолики онлайн”, можно назваться именно так, если у вас действительно онлайн версия и вы находитесь высоко по этому запросу (если смените название), тогда есть возможность что этот трафик придет к вам. И он может быть больше текущего.
- Нет смысла называться “Крестики-Нолики (Tic Tac Toe)” потому что таким образом вы будете не достаточно высоко по запросу “Крестики-Нолики” и недостаточно высоко по “Tic Tac Toe”. В этом случае лучше в русском описании оставить “Крестики-Нолики” а в английском “Tic Tac Toe”, тогда независимо от того какой язык у вас выбран вы будете выше и по запросу “Крестики-Нолики” и по “Tic Tac Toe”.
- Можно поэкспериментировать и в русском названии написать “Крестики-Нолики” а в каком-нибудь тайском “Крестики-Нолики онлайн”, да-да по-русски. Тогда вы будете достаточно высоко в русском поиске по “крестики-нолики” а так же по “крестики-нолики онлайн”. Но это так, мысли для размышления.
- Название приложения имеет высокий приоритет при ранжировании по ключевым словам. Даже не так, название приложения в любой локализации имеет приоритет перед описанием в любой локализации.
- Но описание тоже важно, так, добавление в описание слов “Крестики-Нолики” несколько раз позволяет подняться на пару-тройку позиций, но это конечно зависит от приложений которые располагаются непосредственно рядом с вами в поиске.
- Про переводы на разные языки — пользователи других стран не пишут “Крестики-нолики” они пишут самые разнообразные буковки, которые нам нужно как-то узнать. Традиционный способ — открыть википедию и посмотреть названия в разных локализациях (гугл транслэйт ошибется — википедия — нет). Для крестиков-ноликов я нашёл чудесную статью на белорусском в которой написаны переводы на многие языки. (Оттуда я узнал происхождение чудесного слова “крыжик” которое обозначает checkbox и которое я считал сленгом). Так вот, по запросу “tic tac toe” вы можете по-началу быть далеко за 100 местом, а вот по запросу “Крыжыкі-нулікі” всё может быть совсем по-другому :). Но это если вы добавите описание на белорусском (гугл-траслэйт привет) и название на белорусском. Гугл транслэйт не очень конечно хорошо, но в итоге добавив порядка 10-15 языков (и главное локализованных названий) стало приходить чуть больше пользователей (процентов на 10-20) и стали приходить те, кого раньше совсем небыло.
- Да, в Google Play описания и названия приложений обновляются около часа-двух. Но индекс для поиска обновляется мгновенно. То есть вы в описании меняете название на какое-нибудь другое, сохраняете, и уже можете попробовать поискать по ключевому слову своё приложение в Google Play и тут же оценить его позицию.
И ещё пара замечаний относительно SEO
Я пробовал добавлять локализованные названия в само приложение в надежде что это как-то поменяет позицию в поиске, но увы нет. (я так предположил потому, что гугл плэй даёт подсказки что мол надо бы перевести само приложение на такой-то язык, а значит, возможно, парсит файлы локализации приложения).
Приложения-новички (меньше месяца в маркете) рискуют попасть в топ новых, так что если вы уверены, что приложение прямо может выстрелить — лучше чуть подождать с выкладыванием и выстрелить. Я, понятное дело, ни о чём таком не думал и считаю что в большинстве случаев неторопливой разработки (инди) гораздо важнее фидбек, чтобы не забросить это всё дело окончательно. Поэтому моя первая версия выглядела очень убого.
И напоследок
Когда я собирался только писать статью — я думал, что это будет нечто всеобъемлющее полностью раскрывающее всё, что со мной произошло за последний год, но мне кажется, что я уже утомил читателей своими буковками, да и сам уже подустал. Поэтому я решил, что опишу только некоторые вещи касающиеся разработки приложения, а само программирование оставлю для возможной второй части.
Анонс сиквела будет примерно таким:
- работа с аналитикой,
- разные рекламные сети,
- Crashlytics,
- обфускация кода (proguard),
- реализация таблицы рекордов (ох, слишком тяжелый таск оказался),
- выбор метрики оценки рекорда игрока (сейчас это скорость реакции игрока за последние 15 игр, но у меня было несколько вариантов и я до сих пор не уверен, что этот идеальный),
- защита локально хранящихся данных шифрованием,
- и простая защита от чита в таблице рекордов.
- Могу так же рассказать про расшаривание рекордов игроков с сылкой на сайт игры, но игроки как-то неохотно шарят рекорды.
Остальное добавить по-вкусу.
Если есть пожелания к сиквелу или вопросы или лучше предложения что и как лучше сделать — я с удовольствием готов обсудить.
UPD:Активные и новые пользователи за последний месяц.
UPD2:
Аналитика показывающая, что добавление переводов даёт плюс
Вот аналитика, которая сравнивает два месяца — месяц до добавления переводов в описания на Google Play и месяц после.
Можно видеть, что верхний кружок справа стал более цветастым (появились пользователи с языками которых раньше не было).
Так же можно видеть, что доли русских и американцев поуменьшились (в процентном соотношении). А доля англичан, наоборот — увеличилась. (вероятно за счёт того что в английском языке крестики-нолики называются «Noughts and Crosses»)
Ещё можно увидеть в циферках — что в Греции, Болгарии и Италии вообще не было пользователей, а тут появились.
Можно видеть, что верхний кружок справа стал более цветастым (появились пользователи с языками которых раньше не было).
Так же можно видеть, что доли русских и американцев поуменьшились (в процентном соотношении). А доля англичан, наоборот — увеличилась. (вероятно за счёт того что в английском языке крестики-нолики называются «Noughts and Crosses»)
Ещё можно увидеть в циферках — что в Греции, Болгарии и Италии вообще не было пользователей, а тут появились.