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

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

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

Сообщение mef1sto » 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
tilemap-optimised.png (2.6 КБ) Просмотров: 24232


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
111.jpg (68.39 КБ) Просмотров: 22105


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
111.jpg (92.85 КБ) Просмотров: 24517


Соблюдая все эти моменты можно добиться довольно хорошей производительности даже на слабых мобильных устройствах. Приятного всем игростроения!
Изображение
Аватара пользователя
mef1sto
Игродел
Игродел
 
Сообщения: 2957
Зарегистрирован: 19 дек 2012
Откуда: Новый Уренгой

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

Сообщение Sailer » 20 июл 2014, 14:41

отличный урок! особенно пригодится новичкам :ok:
Аватара пользователя
Sailer
Администратор
Администратор
 
Сообщения: 7330
Зарегистрирован: 05 сен 2012

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

Сообщение Piponga » 20 июл 2014, 15:25

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

Не совсем согласен насчет поведений и частого создания объектов, но это уже детали и часто зависит от ситуации.
Изображение Изображение Изображение Изображение Изображение Изображение Изображение Изображение Изображение Изображение Изображение Изображение Изображение Изображение Изображение
Аватара пользователя
Piponga
Игродел
Игродел
 
Сообщения: 1141
Зарегистрирован: 14 апр 2013
Откуда: Нижний Новгород

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

Сообщение ab » 20 июл 2014, 15:37

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

события проверки нажатия не несут никакой нагрузки
отличный урок!)
ИзображениеИзображениеИзображение
Аватара пользователя
ab
Игродел
Игродел
 
Сообщения: 765
Зарегистрирован: 06 сен 2012

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

Сообщение mef1sto » 13 авг 2014, 14:19

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


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

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


Дебаггер говорит иначе на события is touched :blush:
Изображение
Аватара пользователя
mef1sto
Игродел
Игродел
 
Сообщения: 2957
Зарегистрирован: 19 дек 2012
Откуда: Новый Уренгой

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

Сообщение straw_berry » 26 окт 2014, 22:14

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

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

Сообщение mef1sto » 27 окт 2014, 12:56

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


Ну вообще, по идеи они не должны влиять т.к. не отрисовываются на канвасе в момент, когда находятся за его пределами...
Изображение
Аватара пользователя
mef1sto
Игродел
Игродел
 
Сообщения: 2957
Зарегистрирован: 19 дек 2012
Откуда: Новый Уренгой

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

Сообщение rokstars » 27 окт 2014, 15:07

Количество приватных переменных, надеюсь, никак не влияет на производительность. Или все же влияет, скажем, если их около 15?)
Аватара пользователя
rokstars
Игродел
Игродел
 
Сообщения: 2246
Зарегистрирован: 22 авг 2013

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

Сообщение mef1sto » 27 окт 2014, 15:36

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

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

Сообщение rokstars » 27 окт 2014, 15:42

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

След.

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

Пользователи онлайн

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