Оптимизация 101: Проверка соприкосновений и группы.

2

Tagged

Stats

3,647 visits, 4,369 views

Tools

License

This tutorial is licensed under CC BY 4.0. Please refer to the license text if you wish to reuse, share or remix the content contained within this tutorial.

Published on 31 May, 2016. Last updated 25 Feb, 2019

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

Если вы имеете сотни объектов на которых повешено множество триггеров (соприкосновение пуль в с врагами, таймеры) вы заметите, что производительность будет страдать, даже если соприкосновения не происходит. Это усугубляется, если проверка столкновений происходит между двумя семьями! Когда Construct 2 не проверяет объекты на соприкосновение, которые находятся вне семьи, он проверяет их, есть ли соприкосновение между каждым из них каждое мгновение.

Например, если у вас на сцене 50 врагов в одной семье и 20 пуль в другой и вы проверяете соприкосновения между ними, это сделает проверки для каждого врага и каждой пули каждое мгновение которое может преобразоваться в массивное иррациональное использование ресурсов процессора! 400 врагов 50 проверок 20 пуль равняется 400,000 проверок, когда нет никаких пуль и коллизии вообще не должны проверяться!

Два возможных решения которые работают вместе, игра будет иметь переменную которая говорит игре, как оружие будет использоваться, затем проверить для каждого из них в отдельности и отключать группу, если не используется (т.е. не присутствуют пули). Например, у меня есть переменная пушки если её значение установить как 1 это разрешит только соприкосновения, от этой пушки.

Теперь, это будет решать только часть проблемы, что ещё вы должны сделать, это отключать группу на старте и включать её при создании пули. Затем вы хотите выключить группу снова, когда счётчик пуль падает до 0. (Замечание: все мои пули в семье, названной "weap")

Когда я проделал эту оптимизацию, использование CPU (Центрального процессора) упали на 25%, и даже в то время, когда пули выстреливаются, я заметил небольшое изменение в 3%. ЭТО МНОГО! И я решил написать урок, чтобы все об этом знали.

Принимая эту технику с отключением групп зайдём дальше; Это хорошая идея, чтобы отключать группы, в случаях, когда враг не используется. Если есть множество проверок столкновений или даже таймеров, Вы можете отключать эти группы, если таймер или соприкосновения не используются. Триггеры ещё используют некоторые ресурсы по существованию, и это связано с количеством объектов на уровне.

Например: у меня есть полоса жизни, который показывается, когда на врага наводишь мышкой эта проверка произошла бы для каждого объекта, что использовало бы 8% CPU. Я подумал о малейшем враге, просто полоса жизней вовсе не нужна, когда пару пуль его все равно убьют. Я выключал группу, когда больших врагов нет что возвращало 8% cpu назад!

Выше не показаны события с простыми состояниями: Создание игрока => если броня установлена как "лёгкая" отключить группу полоски жизней, если на "тяжёлую", включить её.

Последний совет которым я хотел бы с вами поделиться, это техника "every dt*2 seconds". Для вещей, которые происходят на регулярной основе, но не нужно быть точным, вы можете уменьшить использование центрального процессора за счет использования dt (который по существу означает, что время, которое требуется, чтобы нарисовать рамку) и умножив это на 2. Это в основном делают условия событий проверки, таким образом, два кадра сокращают использование ЦП в два раза.

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

Иногда лучше принять удар на ЦП ресурсов для важных вещей в игре.

В заключение: Вы можете значительно улучшить производительность за счет преодоления определенных нюансов в системе столкновений Construct 2, путем выключения и включения групп только тогда, когда вы нуждаетесь в них и избегая делать проверки столкновений между семьями спрайтов. Не забывайте использовать ЦП, когда это что-то требует, повторяя проверку реже с DT * 2 или, если это действительно неважно, каждую секунду. Если вы не используете это, не тратить ресурсы на это!

Желаем удачи всем вам! Это мой первый урок, я был вынужден передать эту информацию, как я нашел эти методы чрезвычайно полезны!

Austin Morgan (SunTanK)

variagames.com

  • 0 Comments

Want to leave a comment? Login or Register an account!