Популярный пост ViGaCi Опубликовано 30 ноября, 2021 Популярный пост Поделиться Опубликовано 30 ноября, 2021 В Construct 3 есть много новых функций, которых не было в Construct 2. Думаю, имеет смысл сделать по каждой из них мини-гайд. Этот урок будет максимально подробным, чтобы даже новички смогли понять суть. Итак, что вообще такое фреймрейт? Большинство современных экранов имеют частоту обновления экрана 60 Гц. То есть, частота обновления изображения на экране имеет физическое ограничение в 60 кадров/секунду. Обработка всего, что происходит в игре происходит в два последовательных этапа. Сначала происходит проверка листа событий/выполнение действий, чем занимается CPU. Далее GPU занимается отрисовкой изображения на экране (всего того, что попало в область просмотра). Поскольку экран не может обновляться чаще, чем 60 раз в секунду, то нет смысла обрабатывать лист событий чаще максимальной частоты обновления экрана (минимальное время между "тиками" составляет 1/60 = 0.016 сек). Обработка листа событий (проверка условий и выполнение действий) напрямую зависит от FPS и происходит от 30 до 60 раз в секунду. Когда FPS падает ниже 30 кадров, игра начинает работать в slow-motion, т.е. как бы "замедляется". Самая частая проблема с производительностью — это слабые GPU, которые не успевают отрисовать изображение за 1/60 секунды. В этом случае FPS начинает падать, а параметр delta time увеличиваться. Что такое delta time? Если спрайт перемещается из точки A в точку B со скоростью 240 пикселей в секунду, то на уровне движка это означает, что спрайт меняет своё местоположение 60 раз в секунду, перемещаясь каждый тик на 4 пикселя (240/60) в заданном направлении. Но как посчитать расстояние, на которое должен переместиться спрайт, чтобы его скорость соответствовала реальному времени, а не зависела от FPS?! На помощь приходит выражение dt (delta time) — время между тиками. Это выражение принимает значение от 0.016 до 0.032 (при стандартном макс. FPS в 60 кадров/сек. и минимальном 30 кадров/сек). Умножая скорость на dt, ваши объекты будут двигаться со скоростью, независимой от FPS (напр., "Every tick > set position > 240*dt"). Во всех стандартных поведениях с движением (Platform, MoveTo, Car, Pathfinding и т.д.) dt "вшит" уже изначально, делать ничего не нужно. Так на что же влияет "minimum framerate"? Так вот, "System > set minimum framerate" устанавливает пороговое значение для delta time. По умолчанию минимальный FPS равен 30 кадрам, т.е. значение delta time может увеличиться с 0.016 (при 60 fps) до 0.032 (при 30 fps). Если вы установите минимум фреймрейт на "60", то при падении FPS ниже 60, ваша игра сразу же будет переходить в slow-motion. Если вы установите, скажем, на "15", то игра начнёт замедляться только когда fps упадёт ниже 15. А для чего вообще нужно это замедление? При высоких значениях delta time, ваши спрайты будут перемещаться на большее расстояние за тик. Может возникнуть ситуация, когда пуля проходит сквозь противника (потому что чисто с технической стороны колизии объектов не было). Замедление игры как раз позволяет избежать таких ситуаций. Так нужно ли менять стандартное значение минимального фреймрейта? Если ваша игра чувствительна к проседанию fps (вы часто сталкиваетесь с проблемой, когда коллизии объектов не регистрируются), то попробуйте установить более высокие значение минимального фреймрейта (выше 30). Если в вашей игре проблем с коллизиями нет и вы хотите избавиться от эффекта замедления игры — то установите более низкие значения минимального фреймрейта (ниже 30). 9 1 1 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.