Как я разрабатываю словесные игры для iOS

Как я разрабатываю словесные игры для iOS

Вступление

Разработка мобильных игр — это моё хобби. Я не генерирую идеи для игр каждый день, но когда идея приходит ко мне, я стараюсь её реализовать. Почти все игры, которые я опубликовал — игры в жанре «Словесные». Да, те самые, в которые играет твоя мама.

Почему именно так? Моя выпускная работа в университете была на эту тему (почему именно такая — это отдельная история) и с тех пор я разрабатываю игры в этом жанре. Только изредка отклоняюсь и делаю что-то другое.

В данной статье, я опишу весь процесс разработки игры на конкретном примере.

Концепция

Как я разрабатываю словесные игры для iOS

Идея, которая пришла мне в голову — совместить физическую составляющую action-игр и словесную составляющую словесных.

Концепция простая — поток блоков с буквами летит из левого края экрана в правый в зоне по центру экрана. От границы зоны блоки отсакивают. После вылета за правую часть экрана, блок исчезает, на его место респавнится новый блок и появлятся из левой части экрана.

Из этого потока игроку необходимо выцепить нужные буквы, которые составляют слово снизу экрана. Время ограничено — в начале сессии дается 30 секунд. После клика на нужную букву, она появляется в нужной ячейке сверху экрана. После того, как игрок собрал слово, ему добавляется время и появляется новое слово для сбора.

1 день. Разработка основных механик

​Просто отрисовка | Попытки в физику | Все работает!
​Просто отрисовка | Попытки в физику | Все работает!

Игры я разрабатываю с помощью фреймворка SpriteKit на языке Swift. Иными словами, нативные игры для iOS. Не самое лучшее решение, но у меня есть на это свои причины.

Для начала сделал отрисовку границы зоны пролета блоков. Добавил спавн блоков с буквами. Передвижение блоков решил сделать с помощью физики — гравитация мира тянет блоки в правую часть экрана.

Это был самый трудный момент, ибо с физикой в SpriteKit я практически не работал. И гайдов в интернете не так много, из-за этого, многое делается наугад. Особенно коллизии объектов.

Как я разрабатываю словесные игры для iOS

После нескольких часов появился рабочий прототип — поток букв, выбор нужных блоков и спавн слова для сбора работали. Слово, которое необходимо собрать, появляется снизу. Правильные буквы, на которые кликнул игрок, появляются в блоках сверху.

Как я разрабатываю словесные игры для iOS

Добавил красоты в виде партиклов. Партиклы появлятся после нажатия на блок с буквой.

Как я разрабатываю словесные игры для iOS

Самый бесячий момент дня — потратил около часа на проблему, которая появляется только если тестировать игру на физическом устройстве. Проблема в том, что зона safeArea не закрашивается цветом той UIView, что находится под ней. И не закрашивается только, если UIView под ней черного цвета. С белым и остальными цветами все отлично.

Если делать скриншот или записывать видео с физического устройства, то этого не видно. Единственное, как можно задокументировать — сфотографировать телефон на другой телефон.

Проблему так и не решил. На симуляторах ее нет, возможно, после залива в TestFlight проблема пропадет. Ну или я просто поменяю цвет фона.

2 день. Доводим игру до конца

Как я разрабатываю словесные игры для iOS

Для начала решил изменить то, как показывать игроку те буквы, которые он уже собрал. Блоки сверху решил убрать и вместо этого вывести туда таймер. А в слове снизу [то слово, что необходимо собрать], подсвечивать зеленым цветом собранные буквы.

Добавил лейбл с очками — в центр за пролетающими блоками. При увеличении кол-ва очков, лейбл окрашивается в зеленый цвет на секунду.

Как я разрабатываю словесные игры для iOS

Покрасил приложение в адекватные цвета. Обычно я пытаюсь найти нужное сочетание самостоятельно, на что уходит много времени, но в этот раз нашел нужное мне сочетание сразу в интернете. Тем самым, значительно сократив себе время.

Как я разрабатываю словесные игры для iOS

И раз уже подбирал цвета, решил сразу нарисовать иконку. Тем более, она мне понадобится в главном меню. Иконку в этот раз сделал очень быстро и легко. Отрисовал типичный блок с буквой [Е есть и в английском и русском языках], стащил с интернета две картинки, объединил и перерисовал, добавил к блоку. Получилось очень круто, на мой взгляд.

Как я разрабатываю словесные игры для iOS

Сделал главное меню, подсказку, экран окончания уровня и лидерборд.

Главное меню типовое, я его использую в последних проектах — иконка игры и три кнопки — начать игру, таблица лидеров, оценить игру. Подсказка и окончание уровня также типовые.

Как я разрабатываю словесные игры для iOS

С таблицей лидеров проблем не возникло — воспользовался реализованным решением из другого проекта. Таблица лидеров у меня хранится в Firebase. При первом посещение таблицы лидеров пользователь вводит свой никнейм для таблицы.

Как я разрабатываю словесные игры для iOS

Добавил финальные штрихи к игровой сцене — функциональные кнопки в верхней части экрана и новую игровую механику — бомбы и дополнительное время.

Чтобы игрок не тыкал бездумно на все блоки подряд, добавил бомбу. При нажатии на бомбу, уровень завершается. С другой стороны добавил положительный, для игрока, предмет — блок с с временем. Если нажать на него, то игроку дается дополнительные 10 секунд.

После этого добавил словарь английский слов в игру и локализовал интерфейс на аглийский [первоначально все делал на русском]. Добавил Flurry для отслеживания действий пользователя. И AdMob, для размещения рекламы.

Вчерашняя проблема с окрашиванием safeArea ушла сама собой, типичный Xcode.

​Памогите
​Памогите

Ну и в самом конце моя самая нелюбимая часть — производство скриншотов для AppStore. 3 основных устройства по 4 скриншота на двух языка.

Вечером второго дня отправляю игру на ревью в AppStore — неплохо!

3 день. Отказ в публикации

Кот победит? ​
Кот победит? ​

Сомнения в том, что будут проблемы у меня возникли еще тогда, когда игра не прошла ревью за ночь — обычно именно столько времени это занимает. И правда, через 24 часа после отправки Apple отклонили игру.

Как я разрабатываю словесные игры для iOS

Apple не понравилась ссылка на группу в ВК, которую я указал как адрес поддержки. И у них не сработала кнопка «Оценить приложение».

Странные причины для отказа. Во второй раз у меня отклоняют приложение. Но в прошлый раз, причина была более понятной.

Проверил кнопку — она работает, что на симуляторе, что на двух разных физических устройствах. Возможно, после перезаливки билда, проблема, если она и правда случилась у ревьюера, уйдет сама. А возможно, на повторном ревью, будет другой человек, у которого не будет таких проблем.

Как я разрабатываю словесные игры для iOS

Cсылку на вк, в качестве поддержки, я оставлял к остальным моим приложениям — никогда не возникало вопросов.

После поиска в интернете и вопросов в iOS-комьюнити, обнаружил, что чаще всего создают отдельную группу для приложения на фейсбуке и указывают ее. Так и сделал, после чего отправил на повторную проверку.

4 день. Публикация игры

Как я разрабатываю словесные игры для iOS

Повторное ревью, обычно, занимает гораздо больше времени, но на этот раз мне повезло — через 20 часов после отправил на проверку, приложение опубликовали.

Итого

За два дня разработки и два дня ревью я опубликовал игру в AppStore. После тестирования на друзьях, выявил проблемы и недостатки. В ближайшее время буду делать обновление, которое это исправит.

P.S. Приветствую любые вопросы, предложения и пожелания к игре!

5050
42 комментария

Иконка шикарная!

Спасибо за статью, успехов в дальнейшей разработке.

6

Какие метрики успели собрать после релиза, можете поделиться аналитикой, спасибо)

1

В Flurry собираю, конкретно для этой игры, только скор игрока по окончанию уровня. Остальные стандартные показатели [прим. время сессии] Flurry собирает сама. 

Комментарий недоступен

Игроки все так же бездумно тыкают на блоки. Необходимо отнимать очки за клик на неправильный блок
И необходимо переписать таблицу лидеров, есть ошибки в коде

Можно подробнее про таблицу лидеров? Нужно платить за пользование сервером где этот список хранится? 

Вот ссылка на прайс Firebase: https://firebase.google.com/pricing

В данном случае автор, вероятно, использовал функционал Cloud Firestore. Там к тому же довольно подробная и понятная документация.

2