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

Часть 49: Что на самом деле Phaser, шифрация текстур (часть 3)

Мысль, что стоит написать пост на блоге изначально появилась несколько дней назад. Меня как то осенило… что же такое Phaser? Это один просто канвас, на который мы выводим куски графики в определенной последовательности. Все эти Sptire, Group, Text, это условности… как язык html-а наверно. Вот Group имеет только одну функцию, объединять кучу спрайтов в одно целое, что бы легко ими управлять одной командой. Text это тот же Sprite, но он помогает нам выводить текст на экран через свойство.

Почему я об этом задумался? Неделю назад оптимизировал приложение и отлаживал вывод графики покадрово. Сумел сэкономить 80% команд графического профессора (draw call), чем ускорил работу приложения. Мне пришлось влазить не только в исходники Phaser-а но и PIXI. Возможно про PIXI вы слышали? Так вот, Phaser написан на нем. А сам PIXI не что иноге как надстройка над базовыми фукнциями работы с Canvas через HTML5. Посему… если вам нужна скорость, надо опускаться на уровень PIXI.

Благодаря анализу и замене пару классов в Phaser, мне удалось устранить утечку в памяти на 25мб (приложение 9мб резко увеличивало потребление до 35-45мб и расло). В Phaser много багов, котоырй автор уже не будет исправлять, так как перешел на разработку Phaser3 которую оплачивает команда Firefox-а… у Phaser до сих пор есть проблемы с getBounds() методом, который работает через раз и я потратил не одну десятку часов на обнаружение каждого частного случая.

А так я реализовал очень интересный для меня алгоритм. Новая версия приложения обучалки в FullHD формате. А значит надо было повышать качество иллюстраций. За их отрисовку я заплатил очень много, да и времени ушло не мало. Так что мне меньше всего хочется увидеть мои иллюстрации в какой-то китайской игре по изучению английского языка =) По этому было принято решение зашифровать иллюстрации. Но как сделать это так, что бы дешифрация происходила быстро?

Вот тут то я и вспомнил про Minecraft. Наверно сложно найти человека, который не играл бы в Minecraft, так вот… в Minecraft есть такое понятие как seed карты. Это такое большое число, которое можно передать знакомому и он введя его в игру, получит такую же карту как у вас =) Меня всегда поражало, как же такой рендомный мир минкрафта получается генерируется одинаково?

пример простой шифратор 3 на 3, но можно без проблем делать и 10 на 10, скорость от этого не падает =)

Оказалось дело все в так называемых псевдо случайных числах. Это такие алгоритмы, которые генерируют случайные числа в определенной последовательности =) За основу берется одно число, которое и определяет эту случайную последовательность. Вот как раз то что нам надо для шифрации текстур.

Берем некое свойство иллюстрации, потом добавляем от себя некий пароль и генерируем на основе этого числа от 0 до 9 в случайной последовательности. А после уже программно перемещаем эти кубики в нужной нам последовательности (спасибо РНР который за 15 минут сделал всю работу за меня). В результате мы получаем вот такие вот иллюстрации, которые довольно сложно декодировать, не зная ключа, который где-то обфусцирован в приложении =) Ну а если кто-то готов вручную декодировать эту мозаику, таким и не жалко дать иллюстрацию в пользование.

Как вы понимаете, количество элементов мозайки не ограничено, даже если брать 10 на 10, это все равно 100 draw call одноразово или в среднем 30 мсек при запуске приложения.

Если у кого возникли вопросы, пишите в комментариях. Жаль не осталось времени написать вам про прокрутку… я опробовал несколько новых алгоритмов и ускорил свою в несколько раз за счет уменьшения нагрузки на графический процессор. Уже и сам начинаю замечать, насколько я продвинулся всего за один год разработки игр =) У каждого из вас тоже все получится, главное не ставьте цель стать богатым за счет разработки игр и тогда не будет разочарований =)

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

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