Phaser - полезные советы

Часть 50: Почему я отказался от Phaser-а в пользу Unity!

Всем доброго времени суток… Последние несколько дней, а если быть более точным — уже неделю, потратил на поиск ошибки в новой версии приложения. Очень повезло, что решил сразу не выкладывать в release, а только в виде beta. На практике, после нескольких дней понял, что пользователи добровольно beta качать не хотят. По этому пришлось перейти к плану Б — принудить =) А делается это очень просто: убираем одну страну и удаляем ее из списка release, после чего добавляем в beta. Таким образом, все кто попадают на ваше приложение из этой страны, автоматом видят только beta.

Было очень сложно найти истинную причину повышения процента crash-ей. Ведь последнее обновление фактически было новым приложением (переписанным с нуля) и ошибка могла быть где угодно. А без возможности повторить ошибку на своем мобильном, найти причину — не реально. Помог анализ вне рамок и предрассудков… согласитесь, если вы видите ошибку out of memory вы сразу подумаете, что проблема в хилых китайфонах, верно? А не тут то было… на практике, ошибка оказалась как раз таки в современных, очень дорогих смартфонах 2018 года, с экраном 400dpi =) А вот слабенькие работали как раз таки шустро.

Эта ошибка в очередной раз показала, что если вы хотите реально освоить разработку игр, обязательно делайте игру в FullHD качестве. Тогда любая ваша ошибка или просчет, вам обернется утечкой памяти и crash-ами =) Также вам придется придумать много оригинальных алгоритмов/решений, которые будут оптимизировать сцену, что бы не дай бог, лишний раз не вызывать draw на canvas. Ведь если бы не мое желание запускать приложение на слабеньком Samsung J1, я бы никогда не придумал — пошаговую прокрутку с cache-рованием данных налету (в последствии, от последнего пришлось отказаться, так как вызывало тормоза интерфейса при первом вызове).

В прошлом посте я обещал, что больше ничего добавлять в этот проект не буду, но приложение думает иначе =) Отступление — я верю, что все что не происходит (даже негативное) все к лучшему! И вот вам очередное доказательство! Из за crash-а приложения, среднее время игры уменьшилось в два раза. Но не зная истинной причины, я решил добавить новую функцию о которой меня давно просили пользователи. Теоретически все можно было реализовать за один вечер, но на практике, оказалось что вывести простой список из 80 уроков в Phaser занимает… тадам… 8!!! секунд (тестировал на том же Samsung J1). Я был в шоке! Для чистоты эксперимента я удалил все и оставил только вывод: названия, количества слов и иконки (не иллюстрации, а именно мелкой иконки), но время необходимое на отображение сцены оставалось выше 7 секунд. Это меня очень разочаровало… Я понимаю там анимация и т.д. но текст? Видимо векторный ttf шрифт довольно дорогое удовольствие.

Первая польза: чуть позже, играя в очередную игру на планшете (чисто в образовательных целях), я «придумал» новый стиль прокрутки, а-ля постраничник с анимацией. В принципе прокрутка как и раньше — жестами, но удобней и требует меньше времени на отрисовку (выводим только те уроки, которые видны на экране). И вот тут как раз произошло самое ВАЖНОЕ для меня =) именно из за него я и написал этот «пост предисловие».

Вторая польза: я поговорил с напарником и попросил его сделать мое окошко в юнити (с динамической подгрузкой, прокруткой и все дела). За пол часа все было готово и я был шокирован в хорошем смысле этого слова! На Unity все прокручивалось идеально!!! Но самое главное, сцена генерировалась менее чем за 2 секунды в первый раз и менее пол секунды при повторном открытии. Вот вам и Phaser… Хотя справедливости ради надо сказать, что проблема не Phaser-е, а в Cordova! Она использует устаревший Chrome браузер. В этом я убедился, когда попробовал открыть мое приложение напрямую в Chrome-е на том же Samsung J1. Сцена загрузилась как и в Unity за 2 секунды и прокрутка была плавная (хотя немного уступала Unity).

Вот тут я и принял важное для меня решение (возможно и Элспер по той же причине в свое время отказался от Flash?). Я больше года потратил на освоение разработки игр на очень низком уровне и многому научился (работать с текстурами, кешировать сложные объекты, автоматом подгонять размер текста, реализовал constraints и 9-slice scaling для экономии памяти и все не перечислить). Думаю пора переходить на более высокий уровень — Unity. Книгу скачал и начал читать в свободное время.

Конечно можно было переписать LinDuo на Unity, но приложение не приносит столько дохода, что бы тратить на него больше времени. Пора начинать новую игру Tower Defense, прототип которой создал мой партнер и в которую люди уже сейчас с удовольствием играют 5-7 минут. На этом думаю все и надеюсь мой опыт поможет вас сэкономить ваше время. Если есть вопросы по Phaser, Unity или просто разработке игр — всегда рад буду на них ответить. Спасибо

1 thought on “Часть 50: Почему я отказался от Phaser-а в пользу Unity!

  1. Я как раз год назад начал переход на юнити
    elsper.ru/2017/12/noyabr-2017/
    ))

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

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

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