В общем изучаю в последнее время Phaser3

В общем изучаю в последнее время Phaser3 по рабочим задачам. Это пиздец. Да, очередной пост в рубрике «Как Хейзера всё заебало».

За всю свою жизнь я работал со следующим инструментом для разработки игр:
GameMaker 5.3A/6/7/8/8.1/Studo1.4/Studio2
Unity 4
Construct 1/2
Stencyl
Flashdevelop+Flixel
Phaser2/Phaser3

Вот вкратце рцензии о них:

GameMaker — мой фаворит и надёжный друг, пока что меня не подводил. Игры делают просто и быстро. Что в нём хорошо, так то что он только улучшается. То есть попробовав новую версию не хочется возвращаться на старые. Со временем баги активно исправляются и остаётся только новый крутой функционал. В полседние версии даже драгндроп завезли, не так как в юнити, конечно, но всё же.

Unity — в целом нормально, было. В современном юнити я не работал, но вижу как лагают игры на нём сделанные, а потому страшно. В нём очень круто сделаны компоненты — разработка превращается в конструктор, только моделки успевай клепать. Я делал на JS, а C# показался мне перегруженным, когда нужно было все имена классов прописывать. В итоге чтобы просто подвинуть объект порой пишешь строку кода длинной в сотню-другую символов. Ещё знаю что в 
нём хорошо расшрияемый разработческий функционал.

Construct — я не видел ни одной нормальной игры на этом движке. Помнится, Konjak начинал делать Iconoclasts (в то время Ivory Springs назывался проект), но, видимо, не выдержав убогости движка перешёл на GameMakerStudio. Когда я сам его пробовал он постоянно вылетал, падал и выглядел очень сложным.

Stencyl — милая вещица когда я пробовал. В некотором смысле экономила время на переиспользуемых блоках кода. Но собирать эти кусочки кода и конструктора довольно утомительно. И после компиляции игра нещадно тормозила.

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

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

Flashdevelop + Flixel — это такой салат в котором плавает всё — объекты, ассеты, библиотеки и т.д. Мой опыт работы с ним был полон страданий чтобы закрепить эту ебучую иерархию игра->сцена->объекты->хуелионвложенностей. То есть вместо нормального ООП мы получаем  какой-то кусок кала в котором нужно точно знать ссылку на родительский объект путешествуя по иерархии вникая во внутреннюю кухню движка, чего по идее быть не должно. Отдельного упоминания заслуживает дырявая документация самого Flixel. Недавно пытался собрать standalone версию игры на ПК. Оказывается адоб окончательно охуела. Флэш же умер как всем известно, но даже в конвусливных остатках нельхя собрать прожектор. Ну тупо опция вылючена. Пришлось собирать в AIR и это, скажу я вам, просто ёбаный пиздец. Начиная с того что ебаный Flashdvelop не может нормально поставить SDK для него и собрать exe-шник, и заканчивая тем что приходится собирать проект из виндовой консоли, что ссаный AIR не прописывает пути в path, и требует создания каких-то непонятных сертификатов для компиляции. Комьюнити хуёвое — вместо того чтобы написать пошаговую инструкцию или манул дать — пишут в своих ускоспециализированных терминах. Документация AIR наполовину из бытх ссылок и не работающих примеров. Успокою читателя — с матами я победил это убожество и собрал EXE_шник в итоге.

Phaser2/Phaser3 — со второй версией я познакомился года полтора назад. В целом примерно то же самое что и Flashdevelop + Flixel только в HTML5. Снова сборная солянка из ресурсов и объектов только теперь на JS, а не AS3. Сейчас как я понял идёт активная разработка Phaser3. Ситуация хуже не придумаешь, когда старая версия скоро станет неактуальной с заброшенной документацией, а для новой версии этой документации толком нет. Это особенно хуёвый пример ООП. Когда я сегодня делал таскание камеры мышкой обнаружил что у input-а есть свойства upTime и downTime, которые фиксируют время нажатия и отпускания.  При этом времени которое игрок держит клавишу нажатой нету! А это ведь основая swipe, между прочим! Но мне нужно было что скрывать попап если игрок двигает мышкой более 300ms. Разработчики, видимо, считают что мы должны сами это всё вычислять. Но мне то нужно было не просто upTime-downTime, а в реалтайме. И у этого грёбаного input-а нет никакого функционала чтобы это посчитать! Для этог оприходится лезть в топ иерархии и обращаться к игровому циклу! Это просто пиздец какая инкапсуляция, главное — удобная! Public Morozov называется!

В общем вот такой у меня сегодня coming out, может поможет кому определиться с выбором инструментария.

P.S. Мой совет — видите штуку в которой на каждый объект херачится файл — это хуёвое ООП которое стоит послать подальше чтобы не ебать себе мозг копанием в дивжке а заниматься самой игрой.