Baldix. История о мобильной головоломке за 2 недели
Представьте себе, что в вашей жизни внезапно образовался вакуум длиной в 2 недели. Вам не нужно ни работать, ни учиться, а съездить в отпуск возможности нет. Как бы вы провели это время? Я решил написать мобильную игру.
Я мало связан с геймдевом и в игры играю редко, но день за днем, спускаясь в Московскую подземку, я наблюдал за тысячами людей, уткнувшимися в свои телефоны. Эти толпы народа по доброму часу в день взрывают на своих экранах кристаллики, склеивают цифры и чёрт знает еще чем там занимаются. Эта мысль не давала мне покоя. Феномен, так затягивающий людей, уже очень долго волновал меня, и когда в начале апреля 2015 у меня возникло двухнедельное окно, я принялся создавать свой собственный гипнотизирующий пазл.
Данная история опубликована в рамках рубрики Developer Story, где разработчики делятся секретами своей внутренней кухни. Это бесплатно. Прочитайте правила. Если вы решили самостоятельно написать игру в такой короткий срок, вам придется выставить жесткие рамки и вписать в них ваши требования к проекту. Иначе ничего не успеть. Я определил для себя такие критерии:
Игра должна быть бесплатной, и я не буду вкладывать в нее деньги. Единственный вид дохода — ненавязчивая реклама. Максимально простой концепт, у меня нет времени на сложный сеттинг или графику. Автоматическая генерация игрового контекста, ведь контент стоит времени и денег. Мультиплатформенность. Я же набираюсь опыта, пробуем сразу всё! Игра должна была быть весёлой, иначе зачем она нужна. Я определился с требованиями и пошел черпать вдохновение у гигантов индустрии. Феномен игры 2048 не давал мне покоя. Игровую стилистику решено было делать в том же формате. К слову, очень удобный подход, когда вы не умеете рисовать.
Дальше я начал перебирать в голове популярные головоломки и, конечно, не смог обойти стороной самый главный хит всех времён и народов — Тетрис. Всё новое — это рекомбинация старого, говорит нам главный инженерный подход к изобретательству. Но картинка из падающих цифр никак не скаладывалась в моей голове в органичную игру.
Нужно было что-то еще. Какая-то дополняющая мысль. И я ее нашел. Так случилось, что какое-то время назад я плотно работал над задачами из области NLP (Natural Language Processing), и мне на глаза попалась закладка в браузере, которая вела на страничку проекта Open Corpora.
Это был момент озарения. Я нажал на гиперссылку. В голове моей пронеслась мысль «с неба будут падать буквы, и надо будет собирать из них слова». Страница догрузилась, и я подумал «а отсюда мы возьмем словарь…»
На следующие 2 недели я ушел с головой в разработку. Первое, что мне предстояло сделать, это выбрать игровой движок. Я рассматривал Unity и libGDX. В конце концов остановился на последнем, так как Java и Open Source мне ближе и роднее. На то, чтобы вникнуть в основы фреймворка, ушли первые 2 дня. Я прошерстил довольно много разных туториалов в сети и могу посоветовать начать LibGDX Tutorial series.
Всё описано довольно доходчиво и обстоятельно.
Третий и четвёртый день ушли на написание основной игровой механики и вот, к концу первой недели, я имел на руках первый прототип. На экран падали буквы, если собрать из них слово, тыкая по ним, они исчезали, а на экран падали новые. Такая вот простая идея. Выглядел этот прототип так:
(Картинка нашлась случайно в Skype переписке с моим другом, Ильей Метелёвым, который помогал мне тестировать игру. На картинке мы отлавливали баг — игра упорно требовала, чтобы он собрал уже, наконец, название нашей незабвенной бывшей Родины.)
Всю вторую неделю я занимался причёсыванием различных деталей. Хотелось, чтобы игра была удобной.
Поначалу, чтобы собрать слово, нужно было поочередно набрать нужные буквы, а затем нажать кнопку «готово». В итоге я решил отказаться от этой кнопки и заставил буквы исчезать автоматически. Я старался выкинуть всё лишнее, в том числе и лишнее нажатие.
Игре немного не хватало драйва. Я обратил внимание, что многие проекты используют прием нагнетания обстановки- создают некое искусственное ощущение тревоги. Это хорошо чувствуется на примерах Flappy Bird и Crossy Road. Я добавил в игру таймер. Не успеваешь собрать слово — лови еще буквы. Поторопись, дружище! Не расслабляемся.
Было еще много других мелких дел. Добавить в игру меню, встроить звуки, вычистить словарь от непотребных слов.
Так, ближе к концу второй недели, все более-менее очевидные задачи были решены. Оставалось полдня. Я рассматривал свое творение и медленно, но неотвратимо, чувство прекрасного из глубины подсознания довело до меня мысль, что стоит отказаться от патриотических цветов. Задачу с цветовой схемой мне помог решить Google. На поисковый запрос «Trendy colors April 2015» вывалилась вот такая картинка:
Не долго думая, я принялся превращать своё приложение в «trendy». Вот, что в итоге получилось:
[embedded content]
Итак, я был готов к запуску. Нервы после 2-х недель непрерывной работы немного сдавали, но глаза горели. Слегка трясущимися руками я за день подготовил графику и описания для магазинов и вечером 27 Апреля нажал на заветные кнопки «Publish» в App Store и Google Play. Если вы когда-нибудь задумывались о том, стоит ли создать собственное мобильное приложение, то ответ кроется в этом самом моменте. Я испытывал в те минуты непередаваемые ощущения. Осознание, что проделав двухнедельный марафон, я в итоге создал пусть простой, но законченный продукт, согревало меня изнутри, а предвкушение запуска в публичный доступ будоражило разум и не давало уснуть. Возможно, увидев отчёт, в котором написано, что вы стали миллионером, вы и испытаете еще более изысканное блаженство. Но, поверьте, даже если вы не заработаете ни копейки. Попробуйте. Оно того стоит.
Дальше начинается моя история про грабли. Как вы, наверное, догадываетесь, я не слишком много времени потратил на подготовку к запуску. Думаю, я наступил по ходу работы на все сельскохозяйственные орудия, на какие смог. То, что сумел осознать, я постарался агрегировать тут. Вдруг так случайно сложится, что вы тоже проделаете путь, похожий на мой, и магическим образом мой опыт вас немного поддержит. Итак, мои мобильные грабли.
Процесс публикации в мобильных маркетах устроен по-разному. Свою первую ошибку я, естественно, сделал еще до выхода игры. Следовало бы знать, что то, что у Google занимает 5 часов, у Apple длится не меньше недели. Они по-разному проверяют приложения. К этому следует заранее подготовиться соответствующим образом по срокам.
Как ни странно, мне это сыграло на руку. Я не имел опыта размещения игр и целую неделю обкатывал приложение на Google Play. После того, как я выпустил 5-й апдейт, а в App Store по-прежнему гордо красовался статус «Waiting for review», я отменил публикацию первой iOS версии и запустил процесс заново с обновленным билдом. В итоге игра вышла под 2 платформы с разницей в 3 недели.
Абсолютно точно, обратная связь Android-пользователей сделала первую iOS версию менее сырой. Однако, при запуске игры в AppStore, я пронаблюдал сайд-эффект всплеска загрузок на Google Play в этот же день. Думаю, что при правильном и хорошо спланированном запуске, лучше публиковать приложение на 2-х платформах одновременно. Однако, если специфика вашего приложения требует фидбека реальных пользователей, повторив мой опыт, вы можете решить часть своих проблем.
Разработка мобильных приложений сильно отличается от разработки остального софта. Я думал, я работаю один и буду супер Agile. Я буду быстро получать фидбек от реальных пользователей, вносить изменения, и дело пойдет в гору. Да, за первую неделю после запуска я выкатил 5 апдейтов. Только вот этого делать было нельзя, черт возьми! А простая истина в том, что если в первые дни запуска приложение не взлетело, то позже ему взлететь в разы тяжелее. Так устроены маркеты и их система ранжирования. Тестируйте всё заранее, готовьтесь к первому запуску. Это ваша священная корова.
Озаботьтесь средствами мониторинга. Я как-то наивно понадеялся, что админки мобильных маркетов снабдят меня всем необходимым. Как бы не так! Их информация обновляется с жутким запозданием, а содержание — скудно. Максимум, хватит на полпачки попкорна. Но вы же хотите наслаждаться шоу? Контролировать ситуацию, реагировать? Я встроил в свой проект Google Analytics. Инструмент в целом неплохой, хоть на мой взгляд и теряет небольшую часть данных. Только вот, если вы разрабатываете на libGDX под iOS, приготовьтесь попотеть.
Дело в том, что весь Java код в libGDX проекте работает под управлением виртуальной машины RoboVM. Для использования сторонних библиотек применяются так называемые RoboVM Bindings. Это своеобразный мост для доступа к нативным функциям телефона. Доступный перечень можно найти тут. RoboVM Bindings отлично помогут вам внедрить интеграцию с Game Center и c рекламной площадкой Admob. А вот Google Analytics просто так не в игру не встроить. После очередного апдейта iOS, работать эта либа в RoboVM перестала. Вот в этом обсуждении есть воркэраунд данной проблемы.
Решение — явный костыль. Никого пользоваться не призываю, но может помочь.
Помимо аналитики внутри приложения, полезно знать, откуда на страницы маркетов приходят пользователи. Для меня стало откровением, что сервис http://bit.ly можно использовать для отслеживания источников переходов. Всем советую.
Без вводного обучения в вашу игру никто не будет играть. Да-да. После первого просмотра собранной информации из Google Analytics я пришел в ступор. Среднее время сеанса в моей игре составляло 8 секунд. По какой-то причине люди просто открывали и сразу закрывали её. Соотношение новых пользователей к вернувшимся составляло 80% к 20%. Я в дикой спешке встроил в игру туториал, выкатил апдейт… Через 2 дня средняя сессия — 2,5 минуты, соотношение новых к вернувшимся — 15% к 85%.
За кросс-платформенность нужно платить. Я уже обмолвился о проблемах, связанных с внедрением сторонних библиотек. В случае с libGDX проблемы на этом не заканчиваются. Если вы решитесь использовать эту библиотеку, примите во внимание следующие важные моменты. Виртуальная машина RoboVM пакуется вместе с игрой в ваш .ipa файл, и он получается совсем не маленьким. Вы, наверное, слышали про ограничение в 50Mb для загрузок только по Wi-Fi. Мой .ipa файл весит 54Mb! Это при том, что папка с игровой заставкой и звуками всего 2Mb и около 8 Mb занимают словари. Всё остальное сожрали RoboVM и модуль для работы с Admob.
Второй важный момент. Я пользуюсь Eclipse и у меня возникли проблемы с отладчиком. Я так и не смог по-человечески настроить Debugger на работу с iOS эмулятором, хотя под остальные платформы всё работает нормально.
Такая вот история. Сейчас, оглядываясь на пройденный спринт, я понимаю, что всё могло случится немного лучше, немного точнее. Но кто не ошибался тот не жил! Напоследок, в качестве бонуса для читателей iPhones.ru, я хочу приложить список ресурсов, где в интернете можно попробовать разместить информацию о вашем творении: ссылка на таблицу.
Apple App Store: http://apple.co/1He9WZd
Google Play: http://bit.ly/1He9TMT
Твитнуть Поделиться в Facebook Рассказать ВКонтакте
Я мало связан с геймдевом и в игры играю редко, но день за днем, спускаясь в Московскую подземку, я наблюдал за тысячами людей, уткнувшимися в свои телефоны. Эти толпы народа по доброму часу в день взрывают на своих экранах кристаллики, склеивают цифры и чёрт знает еще чем там занимаются. Эта мысль не давала мне покоя. Феномен, так затягивающий людей, уже очень долго волновал меня, и когда в начале апреля 2015 у меня возникло двухнедельное окно, я принялся создавать свой собственный гипнотизирующий пазл.
Данная история опубликована в рамках рубрики Developer Story, где разработчики делятся секретами своей внутренней кухни. Это бесплатно. Прочитайте правила. Если вы решили самостоятельно написать игру в такой короткий срок, вам придется выставить жесткие рамки и вписать в них ваши требования к проекту. Иначе ничего не успеть. Я определил для себя такие критерии:
Игра должна быть бесплатной, и я не буду вкладывать в нее деньги. Единственный вид дохода — ненавязчивая реклама. Максимально простой концепт, у меня нет времени на сложный сеттинг или графику. Автоматическая генерация игрового контекста, ведь контент стоит времени и денег. Мультиплатформенность. Я же набираюсь опыта, пробуем сразу всё! Игра должна была быть весёлой, иначе зачем она нужна. Я определился с требованиями и пошел черпать вдохновение у гигантов индустрии. Феномен игры 2048 не давал мне покоя. Игровую стилистику решено было делать в том же формате. К слову, очень удобный подход, когда вы не умеете рисовать.
Дальше я начал перебирать в голове популярные головоломки и, конечно, не смог обойти стороной самый главный хит всех времён и народов — Тетрис. Всё новое — это рекомбинация старого, говорит нам главный инженерный подход к изобретательству. Но картинка из падающих цифр никак не скаладывалась в моей голове в органичную игру.
Нужно было что-то еще. Какая-то дополняющая мысль. И я ее нашел. Так случилось, что какое-то время назад я плотно работал над задачами из области NLP (Natural Language Processing), и мне на глаза попалась закладка в браузере, которая вела на страничку проекта Open Corpora.
Это был момент озарения. Я нажал на гиперссылку. В голове моей пронеслась мысль «с неба будут падать буквы, и надо будет собирать из них слова». Страница догрузилась, и я подумал «а отсюда мы возьмем словарь…»
На следующие 2 недели я ушел с головой в разработку. Первое, что мне предстояло сделать, это выбрать игровой движок. Я рассматривал Unity и libGDX. В конце концов остановился на последнем, так как Java и Open Source мне ближе и роднее. На то, чтобы вникнуть в основы фреймворка, ушли первые 2 дня. Я прошерстил довольно много разных туториалов в сети и могу посоветовать начать LibGDX Tutorial series.
Всё описано довольно доходчиво и обстоятельно.
Третий и четвёртый день ушли на написание основной игровой механики и вот, к концу первой недели, я имел на руках первый прототип. На экран падали буквы, если собрать из них слово, тыкая по ним, они исчезали, а на экран падали новые. Такая вот простая идея. Выглядел этот прототип так:
(Картинка нашлась случайно в Skype переписке с моим другом, Ильей Метелёвым, который помогал мне тестировать игру. На картинке мы отлавливали баг — игра упорно требовала, чтобы он собрал уже, наконец, название нашей незабвенной бывшей Родины.)
Всю вторую неделю я занимался причёсыванием различных деталей. Хотелось, чтобы игра была удобной.
Поначалу, чтобы собрать слово, нужно было поочередно набрать нужные буквы, а затем нажать кнопку «готово». В итоге я решил отказаться от этой кнопки и заставил буквы исчезать автоматически. Я старался выкинуть всё лишнее, в том числе и лишнее нажатие.
Игре немного не хватало драйва. Я обратил внимание, что многие проекты используют прием нагнетания обстановки- создают некое искусственное ощущение тревоги. Это хорошо чувствуется на примерах Flappy Bird и Crossy Road. Я добавил в игру таймер. Не успеваешь собрать слово — лови еще буквы. Поторопись, дружище! Не расслабляемся.
Было еще много других мелких дел. Добавить в игру меню, встроить звуки, вычистить словарь от непотребных слов.
Так, ближе к концу второй недели, все более-менее очевидные задачи были решены. Оставалось полдня. Я рассматривал свое творение и медленно, но неотвратимо, чувство прекрасного из глубины подсознания довело до меня мысль, что стоит отказаться от патриотических цветов. Задачу с цветовой схемой мне помог решить Google. На поисковый запрос «Trendy colors April 2015» вывалилась вот такая картинка:
Не долго думая, я принялся превращать своё приложение в «trendy». Вот, что в итоге получилось:
[embedded content]
Итак, я был готов к запуску. Нервы после 2-х недель непрерывной работы немного сдавали, но глаза горели. Слегка трясущимися руками я за день подготовил графику и описания для магазинов и вечером 27 Апреля нажал на заветные кнопки «Publish» в App Store и Google Play. Если вы когда-нибудь задумывались о том, стоит ли создать собственное мобильное приложение, то ответ кроется в этом самом моменте. Я испытывал в те минуты непередаваемые ощущения. Осознание, что проделав двухнедельный марафон, я в итоге создал пусть простой, но законченный продукт, согревало меня изнутри, а предвкушение запуска в публичный доступ будоражило разум и не давало уснуть. Возможно, увидев отчёт, в котором написано, что вы стали миллионером, вы и испытаете еще более изысканное блаженство. Но, поверьте, даже если вы не заработаете ни копейки. Попробуйте. Оно того стоит.
Дальше начинается моя история про грабли. Как вы, наверное, догадываетесь, я не слишком много времени потратил на подготовку к запуску. Думаю, я наступил по ходу работы на все сельскохозяйственные орудия, на какие смог. То, что сумел осознать, я постарался агрегировать тут. Вдруг так случайно сложится, что вы тоже проделаете путь, похожий на мой, и магическим образом мой опыт вас немного поддержит. Итак, мои мобильные грабли.
Процесс публикации в мобильных маркетах устроен по-разному. Свою первую ошибку я, естественно, сделал еще до выхода игры. Следовало бы знать, что то, что у Google занимает 5 часов, у Apple длится не меньше недели. Они по-разному проверяют приложения. К этому следует заранее подготовиться соответствующим образом по срокам.
Как ни странно, мне это сыграло на руку. Я не имел опыта размещения игр и целую неделю обкатывал приложение на Google Play. После того, как я выпустил 5-й апдейт, а в App Store по-прежнему гордо красовался статус «Waiting for review», я отменил публикацию первой iOS версии и запустил процесс заново с обновленным билдом. В итоге игра вышла под 2 платформы с разницей в 3 недели.
Абсолютно точно, обратная связь Android-пользователей сделала первую iOS версию менее сырой. Однако, при запуске игры в AppStore, я пронаблюдал сайд-эффект всплеска загрузок на Google Play в этот же день. Думаю, что при правильном и хорошо спланированном запуске, лучше публиковать приложение на 2-х платформах одновременно. Однако, если специфика вашего приложения требует фидбека реальных пользователей, повторив мой опыт, вы можете решить часть своих проблем.
Разработка мобильных приложений сильно отличается от разработки остального софта. Я думал, я работаю один и буду супер Agile. Я буду быстро получать фидбек от реальных пользователей, вносить изменения, и дело пойдет в гору. Да, за первую неделю после запуска я выкатил 5 апдейтов. Только вот этого делать было нельзя, черт возьми! А простая истина в том, что если в первые дни запуска приложение не взлетело, то позже ему взлететь в разы тяжелее. Так устроены маркеты и их система ранжирования. Тестируйте всё заранее, готовьтесь к первому запуску. Это ваша священная корова.
Озаботьтесь средствами мониторинга. Я как-то наивно понадеялся, что админки мобильных маркетов снабдят меня всем необходимым. Как бы не так! Их информация обновляется с жутким запозданием, а содержание — скудно. Максимум, хватит на полпачки попкорна. Но вы же хотите наслаждаться шоу? Контролировать ситуацию, реагировать? Я встроил в свой проект Google Analytics. Инструмент в целом неплохой, хоть на мой взгляд и теряет небольшую часть данных. Только вот, если вы разрабатываете на libGDX под iOS, приготовьтесь попотеть.
Дело в том, что весь Java код в libGDX проекте работает под управлением виртуальной машины RoboVM. Для использования сторонних библиотек применяются так называемые RoboVM Bindings. Это своеобразный мост для доступа к нативным функциям телефона. Доступный перечень можно найти тут. RoboVM Bindings отлично помогут вам внедрить интеграцию с Game Center и c рекламной площадкой Admob. А вот Google Analytics просто так не в игру не встроить. После очередного апдейта iOS, работать эта либа в RoboVM перестала. Вот в этом обсуждении есть воркэраунд данной проблемы.
Решение — явный костыль. Никого пользоваться не призываю, но может помочь.
Помимо аналитики внутри приложения, полезно знать, откуда на страницы маркетов приходят пользователи. Для меня стало откровением, что сервис http://bit.ly можно использовать для отслеживания источников переходов. Всем советую.
Без вводного обучения в вашу игру никто не будет играть. Да-да. После первого просмотра собранной информации из Google Analytics я пришел в ступор. Среднее время сеанса в моей игре составляло 8 секунд. По какой-то причине люди просто открывали и сразу закрывали её. Соотношение новых пользователей к вернувшимся составляло 80% к 20%. Я в дикой спешке встроил в игру туториал, выкатил апдейт… Через 2 дня средняя сессия — 2,5 минуты, соотношение новых к вернувшимся — 15% к 85%.
За кросс-платформенность нужно платить. Я уже обмолвился о проблемах, связанных с внедрением сторонних библиотек. В случае с libGDX проблемы на этом не заканчиваются. Если вы решитесь использовать эту библиотеку, примите во внимание следующие важные моменты. Виртуальная машина RoboVM пакуется вместе с игрой в ваш .ipa файл, и он получается совсем не маленьким. Вы, наверное, слышали про ограничение в 50Mb для загрузок только по Wi-Fi. Мой .ipa файл весит 54Mb! Это при том, что папка с игровой заставкой и звуками всего 2Mb и около 8 Mb занимают словари. Всё остальное сожрали RoboVM и модуль для работы с Admob.
Второй важный момент. Я пользуюсь Eclipse и у меня возникли проблемы с отладчиком. Я так и не смог по-человечески настроить Debugger на работу с iOS эмулятором, хотя под остальные платформы всё работает нормально.
Такая вот история. Сейчас, оглядываясь на пройденный спринт, я понимаю, что всё могло случится немного лучше, немного точнее. Но кто не ошибался тот не жил! Напоследок, в качестве бонуса для читателей iPhones.ru, я хочу приложить список ресурсов, где в интернете можно попробовать разместить информацию о вашем творении: ссылка на таблицу.
Apple App Store: http://apple.co/1He9WZd
Google Play: http://bit.ly/1He9TMT
Твитнуть Поделиться в Facebook Рассказать ВКонтакте
Ещё новости по теме:
18:20