Оптимизация проекта на Construct 2 для мобильных устройств

уроки, мануалы, советы по Construct 2

Сообщение Оптимизация проекта на Construct 2 для мобильных устройств
» 20 июл 2014, 14:34

Добра Вам, уважаемые читатели!

У инструмента по созданию игр Scirra Construct 2 уже довольно много пользователей. Всё чаще среди них я встречаю тех, кто разочаровался в данном конструкторе, пытаясь сотворить игру под мобильные платформы.
Причина разочарования зачастую одна и та же: крайне низкая производительность на целевых устройствах. Чаще всего игроделы пеняют это на недостатки самого Construct 2, и приходят к заключению, что Construct 2 и мобильные устройства - вещи несовместимые. Однако это не совсем так. Есть определенные сложности, но так же есть и пути их решения, о чем я тут и расскажу.

1. Спрайты и анимации.


1.1. Старайтесь избегать больших спрайтов. Статичную картинку 1024х512 правильней будет порезать на более мелкие 512х512 куски(особенно это актуально для сильно вытянутых картинок).

1.jpg


1.2. Вместо нагромождения однотипных спрайтов используйте Tiled Background или TileMap, это значительно повысит производительность. Так же не стоит забивать тайлмап однотипными спрайтами с разными углами отображения т.к. в самом плагине есть опция поворота и отражения тайлов.

2.jpg


ПС: Однако стоит принять во внимание, что тайлмап выгодней именно при использовании повторяющимихся участков тайлов, которые будут рендерится за 1 draw call.

tilemap-optimised.png


1.3. Не перегружайте анимации кадрами. Человеческий глаз скорей всего не увидит 60 кадров бега персонажа со скоростью 60 кадров в секунду. Порой хватает и 12 кадров со скоростью 12 кадров в секунду.

1.4. Избегайте программного изменения размеров спрайтов. Т.е. если вы загрузили в проект спрайт 512х512, а в игре Вы привели его к размеру 128х128, то имеет смысл изменить сам спрайт в редакторе спрайтов, а не масштабировать его в игровом редакторе.

3.jpg


1.5. Делайте Crop анимаций, для более плотной упаковки в атласы при экспорте. Так же старайтесь приводить их к размерам 16х16, 32х32, 64х64, 128х128 и т.д. Спрайт размером 129х129 на некоторых устройствах может восприниматься как спрайт с размерностью 256х256 (т.е. на порядок выше кратностью).

4.jpg


1.6. Большое количество спрайтов на экране приведет к сильной загрузке мобильного процессора. Старайтесь держать их количество в районе 60.

1.7. Не вращайте спрайты. Поведение Rotate снижает производительность.

1.8. Используйте Bounding Box в качестве маски для объектов (там где не требуется иное) - При такой маске просчеты коллизий происходят по легкому пути через простое сравнение координат и ширины объекта.

2. Настройки проекта.


2.1. Pixel Rounding. Округление значений размеров и положений до запятой. Выбор этой опции увеличит производительность, однако потеряется точность. Пример: Спрайт не сможет принять положение х=250.545, у=343.212, он примет положение х=251, у=343.

2.2. Sampling. Для увеличения производительности используйте опцию Point. Однако это не подходит для некоторых игр т.к. уберет сглаживание картинки. Идеально для пиксель арта.

2.3. Clear Background. Ставим опцию на NO. Отключает заполнение canvas белым фоном.

2.4. Force own texture на всех слоях ставим NO. Иначе каждый слой будет использовать свою собственную, отдельно отображаемую текстуру.

2.5. В том случае, если у вас на слое находится множество статичных спрайтов - используйте в свойствах слоя Render Cells

5.jpg


3. Поведения.


3.1. Старайтесь избегать неоправданного нагромождения поведений(к примеру для движения объекта сразу с помощью платформера, 8 дирекшн, буллета и физики). Поведения несут в себе довольно много параметров, которые Вы зачастую не используете, но которые обрабатываются и проверяются при выполнении кода.

Как показали тесты, то же поведение Pin для закрепления позиции объекта несет бОльшую нагрузку на ЦП, чем Every Tick Set Position:

111.jpg


4. Физика.


4.1. Используйте более быстрые, чем Box2d Web физические движки, к примеру: CocoonJs Accelerated Physics, Chipmunk Physics

4.2. Используйте как можно меньшее кол-во граней в полигоне объекта. Идеал - 3 грани, терпимо - 8 граней, жесть - 20+ граней. Для квадратных и круглых объектов - используйте маски Bounding Box и Circle соответственно.

6.jpg


4.3. Избегайте взаимодействия физических объектов с иными поведениями. К примеру не правильно будет крепить физическое тело на Set XY и вращать его поведением Rotate и двигать поведением Платформер. Используйте возможности самого Physics для этих целей.

5. Текстовые объекты.


5.1. Вместо объекта Text используйте SpriteFont. Это значительно повысит производительность.

7.jpg


6. Группы, проверки, прочие хитрости.


6.1. Разбивайте события на группы. Отключайте неиспользуемые в данный момент времени группы событий. Это избавит от множества ненужных проверок и повысит производительность. К примеру незачем каждый тик проверять: "Прошел ли удар по персонажу", если игра стоит на паузе. Или так же не имеет смысла проверять нажата та или иная кнопка, если вовсе нет нажатия по экрану:

6.2. Уменьшайте количество событий, выполняемых "Every Tick". Некоторым событиям достаточно выполняться каждые 0.1-0.5-1 секунду, а не 0.016, для этого в эвент с проверкой можно поместить дополнительное условие: System: Every N seconds

6.3. Не забывайте ставить в событиях(без триггеров), требуемых единоразового выполнения Trigger once while true.

Пример: Player.X<20 -> Set LVL_START = 1, при значении координаты Х игрока выше 20, каждый тик переменная LVL_START будет принимать значение 1. При постановке Trigger once while true событие будет выполнено единожды.

6.4. Частицы. Могут негативно влиять на производительность мобильной игры. Старайтесь держать их количество в пределах 50 одновременно отображаемых.

6.5. Использование любых WebGL эффектов. В данный момент их использование напрочь убивает производительность.

6.6. Слабый мусоросборник. Старайтесь избегать частого создания-уничтожения объектов. К примеру падающие снежинки.
Неправильный путь: создать снежинку сверху, уничтожить её по достижении низа, создать новую снежинку сверху и т.д.
Правильный путь: Создать снежинку сверху, по достижении низа вновь переместить её наверх.

6.7. Проверка на коллизии. Отключайте проверку коллизий для тех объектов, в которых она не используется:
111.jpg


Соблюдая все эти моменты можно добиться довольно хорошей производительности даже на слабых мобильных устройствах. Приятного всем игростроения!
Изображение
Аватара пользователя

Модератор
Сообщений: 2954
Я тут с 19 дек 2012
Откуда: Новый Уренгой
Репутация 298 [ ? ]

Сообщение Оптимизация проекта на Construct 2 под мобильные устройства
» 20 июл 2014, 14:41

отличный урок! особенно пригодится новичкам :ok:
Аватара пользователя

Администратор
Сообщений: 5510
Я тут с 05 сен 2012
Двиг: Construct2
Лицензия: Personal
Skype: c2community
VK: gabrielsailergray
Репутация 366 [ ? ]

Сообщение Оптимизация проекта на Construct 2 под мобильные устройства
» 20 июл 2014, 15:25

Перенес таки сюда )
:good:

Не совсем согласен насчет поведений и частого создания объектов, но это уже детали и часто зависит от ситуации.
Аватара пользователя

Игродел
Сообщений: 1074
Я тут с 14 апр 2013
Откуда: Нижний Новгород
Репутация 294 [ ? ]

Сообщение Оптимизация проекта на Construct 2 под мобильные устройства
» 20 июл 2014, 15:37

:lol: пункт 6.3. с тем же успехом там может стоять - персонаж is collision finish...
группы хороши в меру...
я думаю единственное что хорошо напрягает в событиях - это проверка на столкновения - их и надо отключать через группы (вот только не всегда это возможно)
mef1sto писал(а):Или так же не имеет смысла проверять нажата та или иная кнопка, если вовсе нет нажатия по экрану:

события проверки нажатия не несут никакой нагрузки
отличный урок!)
ИзображениеИзображениеИзображение
Аватара пользователя
ab

Администратор
Сообщений: 771
Я тут с 06 сен 2012
Репутация 108 [ ? ]

Сообщение Оптимизация проекта на Construct 2 под мобильные устройства
» 13 авг 2014, 14:19

ab писал(а):с тем же успехом там может стоять - персонаж is collision finish...


Да, не самый неудачный пример, но суть не меняется от того - для бестригерных событий)

ab писал(а):события проверки нажатия не несут никакой нагрузки


Дебаггер говорит иначе на события is touched :blush:
Изображение
Аватара пользователя

Модератор
Сообщений: 2954
Я тут с 19 дек 2012
Откуда: Новый Уренгой
Репутация 298 [ ? ]

Сообщение Оптимизация проекта на Construct 2 под мобильные устройства
» 26 окт 2014, 22:14

Влияют ли на производительность объекты рядом с layout ( которые не создаются а переносятся).
Например, часы gear2 загружают игру на которой layout не имеет объектов во круг. И не загружает, где имеет ( ну больше 10 в моем случае).
Аватара пользователя

Участник
Сообщений: 82
Я тут с 08 апр 2014
Репутация 0 [ ? ]

Сообщение Оптимизация проекта на Construct 2 под мобильные устройства
» 27 окт 2014, 12:56

straw_berry писал(а):Влияют ли на производительность объекты рядом с layout


Ну вообще, по идеи они не должны влиять т.к. не отрисовываются на канвасе в момент, когда находятся за его пределами...
Изображение
Аватара пользователя

Модератор
Сообщений: 2954
Я тут с 19 дек 2012
Откуда: Новый Уренгой
Репутация 298 [ ? ]

Сообщение Оптимизация проекта на Construct 2 под мобильные устройства
» 27 окт 2014, 15:07

Количество приватных переменных, надеюсь, никак не влияет на производительность. Или все же влияет, скажем, если их около 15?)
Аватара пользователя

Модератор
Сообщений: 2231
Я тут с 22 авг 2013
Репутация 447 [ ? ]

Сообщение Оптимизация проекта на Construct 2 под мобильные устройства
» 27 окт 2014, 15:36

Да всё влияет, только в большей или меньшей степени)) Лично у меня первый бэта-пойс вылетал каждые 3-7 минут игровой сессии... начал искать причины, покопавшись в мусоро-коде пришел к выводу, что 70+ глобальных переменных, дублирующихся в кэш вэб-сторэджа это жирно... сократил до 5 глобальных и вылеты прекратились - магия :biggrin:
Изображение
Аватара пользователя

Модератор
Сообщений: 2954
Я тут с 19 дек 2012
Откуда: Новый Уренгой
Репутация 298 [ ? ]

Сообщение Оптимизация проекта на Construct 2 под мобильные устройства
» 27 окт 2014, 15:42

mef1sto, не, ну на счет глобальных я еще могу понять. Скорость доступа и прочая байда, но вот что на счет локальных переменных... По идеи ничего страшного не произойдет от такого количества. Тем более что одновременно проверяются максимум 2-3 переменных у конкретного объекта.
Вот у тебя в Forgotten Legendz тоже не мало приватных переменных, и тесты на мобилках проводил, вот я думал, что может что знаешь на этот счет)))
Аватара пользователя

Модератор
Сообщений: 2231
Я тут с 22 авг 2013
Репутация 447 [ ? ]



Вернуться в Уроки по Construct 2

Сейчас эту тему просматривают

Зарегистрированные пользователи: нет зарегистрированных пользователей

Наверх