HTML5 Phaser ECMAScript 6

Часть 48: Плюсы и минусы Phaser, Gamemaker, Unity (часть 2)

На самом деле, в предыдущем посте я хотел с вами обсудить вопрос Phaser. Я уже год как ним пользуюсь и теперь имея опыт с разными движками (Gamemaker, Unity), меня удивляет тот факт, что люди как бы не могут сформулировать какая между ними разница. А разница там огромная! Выбрав Phaser вы не имеете никакой графической оболочки для создания интерфейса, что на практике забирает львиную долю времени (особенно для мобильных игр). В Gamemaker-е у вас отличный графический интерфейс но почти нулевой контроль над тем, как вся игра работает. В принципе Gamemaker простой, потому что он все делает за вас =) Тут даже кодить почти ничего не надо и все можно делать визуально. А вот Unity это отличный! визуальный редактор и разбивка кода на MVC модель. Но за все это вы будете платить хреновым и не гибким языком C#.

почти автоматическая генерация прокрутки в Unity, в моем движке все аналогично, всего одна команда =)

И не надо мне сейчас рассказывать какой это хороший язык… наслышанный я про С в свое время (кодю уже 18 лет). Если сравнить JavaScript с C#, то я однозначно дам предпочтение первому (кодил я и на С, и на Java, в далеком прошлом на Assembler, Delphi, VB). Почему? Да очень просто… в JS (как частично и в РНР) мне можно на лету создать массив/объект и добавить в него пару key=>value или вовсе хрен его знает key:{var:big, sub_key:{sub_sub_key: data}}, а вот в C# надо использовать словари и шаблон заранее просчитывать. Возможность работы с массивом, где ключ не число ЭТО очень уменьшает/упрощает код.

Часто говорят, что типизированный язык мол помогают не допускать ошибки… Что то я за все эти годы писания кода НИ РАЗУ не сталкивался с случаем, когда из за типа у меня что-то не работало! Некоторые говорят, что это помогает экономить память. На самом деле разница есть, но она не стоит того гимора, который добавляет типизированный язык.

Пошли дальше, вот допустим в Unity вам нужно получить простой unixtimestamp… фиг! Для этого надо брать дату и отнимать от нее базовое время отчета «Int32 unixTimestamp = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;«. В JS это короткая команда «new Date().getTime()» Вопрос нафига? Как можно было такое не вложить в движок через некий метод? Вы даже нормально секунду получить не можете… она будет у вас состоять из 10 лямов тиков =) В JS вы заметили что время в 1000 милисекундах, ну так это еще понять можно, но зачем дробить секунду на 10 миллионов?  Вот нахрена мне такая точность?

Определение размера двухмерного массива это отдельный гимор… сериалзиация сложных данных в Unity тоже гимор =) Я не говорю что в нем нет возможности что-то реализовать, но делать это намного сложней чем в том же JS. Если вы делаете не 3Д, то смысла давать ему предпочтение я пока не вижу. Но вот интересные фишки создания графического интерфейса у них стоит позаимствовать, что бы добавить в свой движок =)

Надеюсь мой короткий пост помог вам чуть больше разобраться в этих языках и какой из них выбрать вам для вашей игры. Я лично остаюсь пока на Phaser-е, возможно перейду на Phaser3 или «деградирую» до PIXI. Все зависит, насколько тяжелой будет анимация в игре =) Но за каждую сэкономленный draw call, придется платить временем и нервными клеткам. Всем приятного кодинга =)

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *