Каково это, сделать игру на китайском движке Cocos Creator 3?

Я, всем довольный, работаю в Cocos Creator 3 [<a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Fwww.cocos.com%2Fen%2Fcreator&postId=3069584" rel="nofollow noreferrer noopener" target="_blank">1</a>]
Я, всем довольный, работаю в Cocos Creator 3 [1]

Хорошая новость в том, что на нём гарантированно можно довести игру до завершения и стабильного состояния. И это важно, т.к. в процессе разработки у меня не было уверенности в удачном финале. У движка есть увесистые плюсы и минусы.

Cocos Creator 3 [1] - это китайский опенсорсный игровой движок, заточенный на разработку браузерных игр и интерактивных/игровых рекламных блоков. Он весьма популярен в Китае, и очень слабо известен в остальном мире.

Статистика использования игровых движков в играх на Стиме [<a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Fsteamdb.info%2Ftech%2F&postId=3069584" rel="nofollow noreferrer noopener" target="_blank">2</a>]
Статистика использования игровых движков в играх на Стиме [2]

В статистике Стима их набралось 740 штук, что равно примерно 0,9%. В принципе это весьма солидно. Вероятно тут в статистике очень хорошо помогли китайские коллеги. Сюда входят и игры на прошлых версиях Кокоса, который довольно сильно отличается от текущей третьей. Есть немного даже и популярных игр.

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

1. Это полноценный рабочий инструмент, на котором уже другие люди смогли добиться хорошего результата. 2. Это китайский движок, он бесплатный, опенсорсный, и есть основания полагать, что он не станет вдруг банить/блокировать российских разработчиков. С Construct, Unity, Unreal Engine, Phaser и т.д. у меня сомнений по этому поводу несколько больше. 3. Он заточен на браузерные 2D игры/рекламу и в итоговом билде вес от самого движка минимален. У меня при поверхностной оптимизации получилось меньше 2 МБ. 4. Язык разработки - typescript/javascript, и нет блюпринтов. 5. Интерфейс слизан с Unity, и он довольно удобный.

Игра "Король гоблинов" в процессе разработки [<a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Fyandex.ru%2Fgames%2Fapp%2F371939&postId=3069584" rel="nofollow noreferrer noopener" target="_blank">3</a>]
Игра "Король гоблинов" в процессе разработки [3]

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

1. Маленькое англоязычное и русскоязычное сообщество. В китайских соцсетях всё очень хорошо. А в остальных не очень.
Есть туториал Флеппи Бёрда от самой команды Кокоса [4], что полезно, но разработка простого игрового процесса ооочень далека от разработки реальной игры. На их канале есть ещё туториал, но я не нашёл в нём чего-то дополнительно ценного.
Есть англоязычные уроки[5], которые хоть и для 2-ой версии, но зато сжатые и краткие без воды.
Есть русский туторила от Grozamir[6] - уроков у него немного, но зато он ещё ведёт группу в Телеграме, где я смог найти несколько решений для своих проблем.
Есть конечно ещё, но в процессе поиска Вы будете натыкаться на китайские туториалы, очень старые туториалы и онлайн-разработку. Если примеры для Вас важны - лучше выбирайте Unity или другие популярные.

Официальный гайд сохранения игровых данных [<a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Fdocs.cocos.com%2Fcreator%2F3.8%2Fmanual%2Fen%2Fadvanced-topics%2Fdata-storage.html%23save-data&postId=3069584" rel="nofollow noreferrer noopener" target="_blank">7</a>] - лажа
Официальный гайд сохранения игровых данных [7] - лажа

2. Официальная документация неполная и иногда с ошибками. Простой пример. Вы захотите сохранять игровой процесс и попробуете воспользоваться официальным гайдом [7]. В реальности же, вы должны воспользоваться вот таким кодом: `window.localStorage.setItem('configData', JSON.stringify(configData))`. А всё дело в том, что гайд написан для версии Кокоса 2.x, а в третьем всё по другому. И неважно, что на этой странице гордо висит плашка - актуализировано пару недель назад.

Лишний пиксель - и пусть весь мир подождёт, пока ты будешь искать баг
Лишний пиксель - и пусть весь мир подождёт, пока ты будешь искать баг

3. Во время модерации на Яндекс-площадку была выявлена ошибка, что при некоторых разрешениях экрана появляется горизонтальная и вертикальная прокрутки. В любом браузере. Это было не очень весело, но удалось выявить причину. В игровом блоке id=GameDiv движок сам вычисляет ширину width=770px. Так вот, иногда ширина экрана оказывается равна 769.6px, а движок её округляет до 770. При этом родительский блок самой игровой площадки выделяет 769px на игру. Мы получаем лишний пиксель, который создаёт горизонтальную прокрутку. Но т.к. горизонтальная прокрутка тоже занимает место, то из-за неё возникает и вертикальная прокрутка. Я это исправил костылём, добавив в шаблон билда Кокоса для тега body css свойство `overflow: hidden;`. Мне как-то казалось, что подобные проблемы не должны возникать в таких местах в игровых движках. Какая наивность.

4. Рынок труда. Он очень не очень для специалистов в Cocos Creator. Если Вы хотите работать в Геймдеве программистом, то найти хорошо оплачиваемую работу будет сложнее, чем с навыками в более популярных движках. Я работать в Геймдеве программистом не хочу, поэтому для меня этот пункт недостатком не является. Но для многих может.

О чём я не могу судить

1. Готовых ассетов немного, но я ими не пользуюсь, поэтому не принципиально.
2. 3D есть и игру в нём сделать можно. Не пробовал, но беглый взгляд со стороны указывает, что тут всё слабовато с 3D. Мне в 3D сейчас не хочется, поэтому тоже не принципиально.
3. Меня несколько пугает процесс сборки билда под Стим, т.к. по косвенным признакам лёгким этот процесс назвать нельзя. Официального шаблона или гайда я не нашёл, а это уже тревожный признак.

"Sort the court" оригинал Flash/Unity [<a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Fgraebor.itch.io%2Fsort-the-court&postId=3069584" rel="nofollow noreferrer noopener" target="_blank">8</a>] и "Король гоблинов" мой на Cocos [<a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Fyandex.ru%2Fgames%2Fapp%2F371939&postId=3069584" rel="nofollow noreferrer noopener" target="_blank">3</a>]
"Sort the court" оригинал Flash/Unity [8] и "Король гоблинов" мой на Cocos [3]

Как результат, я доделал и опубликовал игру на Яндекс-площадке. Это слямзенная версия старой флеш игры "Sort the court", но только про злых и циничных гоблинов. Улучшил игровой процесс в меру своих возможностей, сделав 7 концовок и сильно уменьшив повторяемость диалогов оригинала. Прошу попробовать. Надеюсь, что фатальных багов не обнаружится. (перевёрнутый дварф после казни и воскрешения не считается)

Выводы

Я пока и сам не уверен, стоит ли соло-разработчику работать с Кокосом. Есть плюсы, но и много минусов. Если минусы Unity Вас не волнуют, то вероятнее всего он будет оптимальным выбором. А может даже Godot или Unreal, если Вас зовёт дорога приключений.

Список источников

2727
24 комментария

И тут Кокос, опять скам

11
1

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

1

китайский опенсорсныйИстиное проявление коммунизма!

7

Плохо чтоли? Хорошо!

3

Дружище, а как графику делаешь? Выглядит очень симпатично!

2

очень похоже на нейронные сети, но могу ошибаться

Я вчера немного в игру поиграл - внимания к мелочам, конечно, не хватает.
Самое банальное и первое, что бросается в глаза - в игре всего 3 ресурса: жители, уважение и золото. Как вообще можно было прийти к решению, в котором первые два ресурса мало того, что одного цвета, так еще и имеют похожие иконки? Это же должно быть по умолчанию контринтуинтивно.
Собственно, если взглянуть на оригинал, то можно увидеть разницу - все три ресурса имеют разные совершенно разные иконки и цвета.

То, что на фоне город как-то меняется я не очень заметил. В оригинале это читается сразу же. Про отсутствие сатисфайных анимаций получения золота, ответов Y и N ты сам в предыдущей статье писал. Но это важно же! Из таких мелочей игры и становятся такими завлекательными.

Но на минут 15 меня затянуло - это неплохой результат!

1
1