Зачем это всё
Я всё ещё в процессе переписывания игры с Event Sheet на TypeScript в Construct 3. Не ожидал, что это будет настолько болезненно. Вроде бы шаг вперёд, но есть ощущение, что топчусь на месте. Вместо того чтобы пилить фичи, я фактически занимаюсь только рефакторингом. Ноль времени на креатив, сто процентов — на выживание.
Однако я точно знаю, что это нужно сделать, чтобы двигаться дальше. Строю фундамент, который пригодится не только для этой игры, но и для всех будущих проектов. Больно сейчас, но потом всё наладится.
Я оформил плюсы и минусы, которые успел заметить в процессе.
Выявленные минусы:
Весь процесс через код
Сначала это кажется минусом, особенно когда нет наработанной базы типичных решений, таких как: адаптивность верстки, обработка нажатий на объекты, периодические операции и так далее. В Event Sheet всё это решается за несколько кликов. Можно было просто перетащить событие, настроить действия, и игра уже как-то работала.
Однако при работе через код каждый аспект игры приходится прописывать вручную. Например, обработка события нажатия на экран требует немалых усилий. Я думаю, что буду собирать инструкции по тому, как реализовать различные вещи в Construct 3 с помощью кода.
Плохо с обучающими материалами
Большая часть туториалов направлена на визуальное программирование. Например, "Как работать с объектом пуля в Construct 3". Очень мало простых рецептов по адаптивности, обработке касаний на экране и т. п. Если что-то обычное хочется сделать через код, это превращается в настоящий вызов.
Гугл не помогает, а нейросети предлагают такие странные решения, что иногда хочется просто сбежать в лес обнимать деревья. Хорошо, что со временем начинаешь всё больше ориентироваться, но поначалу ощущение застрявшего прогресса довольно сильное.
Управление состоянием объектов
В Event Sheet всё было проще: создал объект, добавил блок с нужным триггером, и движок сам следил за состоянием. Можно было легко подписаться на события, такие как создание объектов, их разрушение или взаимодействие.
В TypeScript всё усложняется. Здесь у тебя есть только одна точка входа в разработку — функция Tick (runtime: IRuntime), которая вызывается каждый тик. Теперь необходимо создавать переменные и флаги, прописывать условия для каждого состояния игры в целом и для объектов в частности. При создании новых объектов предстоит прописать всю логику вручную: размеры, позиции, поведение. Легко можно упустить какой-то нюанс, и в итоге появляются баги.
Ошибки с логикой
Асинхронные операции, двойные нажатия на экран, бесконечные циклы или другие нюансы. Про это раньше можно было просто не думать. Теперь же написание игровой логики требует гораздо больше внимания. Иногда кажется, что решаешь одну проблему, а она порождает сразу несколько новых. Каждое "переключение" требует внимания, чтобы не наделать ошибок.
Больше времени на тестирование
Процесс тестирования становится сложнее. Так как все состояния теперь контролируются через код, появляется много новых багов, о которых ты просто не подумал.
Возможные плюсы:
Git и ветвление
Использование Git и ветвление позволяет безопасно работать над разными частями игры, откатывать изменения и работать в команде.
Работа в IDE
Подсветка синтаксиса, автозаполнение и автоматический рефакторинг помогают заметить ошибки до того, как они станут настоящими багами. В Event Sheet сложнее с поиском и без хорошей структуры не всегда было понятно, что именно не так с кодом, а здесь можно контролировать каждый шаг, быстро искать и оперативно исправлять ошибки.
Чувство прогресса
Да, это трудно. Да, хочется бросить всё и стать продавцом мороженого. Но когда видишь, как проект постепенно обретает форму, радуешься даже маленьким победам.
TypeScript
Construct 3 предоставляет интерфейсы для работы, и это, по сути, внутренняя документация по API: они описывают методы и свойства, так что можно сразу понять, что и как работает, не теряясь в поисках информации в интернете. В коде также есть комментарии, помогающие разобраться, а в некоторых местах даже ссылки на документацию. Всё это делает процесс разработки намного проще, чем когда ты пытаешься понять, что происходит в коде без всякой подсказки.
Итоги:
Переписать игру с Event Sheet на TypeScript — это всё равно что менять колёса на ходу. Сначала больно, потом привыкаешь, а в конце получаешь тот самый крутой фундамент, который позволяет двигаться дальше. Конечно, без проблем не обойдется. Особенно будут большие проблемы если плохо ориентируешься в кодинге.
Но по мере того как проект обретает форму, понимаешь: боль того стоит. Это не только даёт больше гибкости, но и открывает массу новых возможностей для развития игры и для будущих проектов.