<MyRusakov.ru />

Программирование на C++ в Unreal Engine 5

Программирование на C++ в Unreal Engine 5

Данный курс научит Вас созданию игр на C++ в Unreal Engine 5. Курс состоит из 12 разделов, в которых Вас ждёт теория и практика. Причём, в качестве практики будет создан весьма крупный проект объёмом свыше 5000 строк качественного кода, который уже на практике познакомит Вас с принципами создания игр на C++ в Unreal Engine 5.

Параллельно с курсом Вы также будете получать домашние задания, результатом которых станет, в том числе, полноценная серьёзная работа для портфолио.

Помимо самого курса Вас ждёт ещё и очень ценный Бонус: «Тестирование Unreal-проектов на Python», в рамках которого Вы научитесь писать очень полезные тесты для тестирования самых разных аспектов разработки игр.

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Какая тема Вас интересует больше?

Как определить скрытие веб-страницы из-за наложения на мобильных устройствах?

Как определить скрытие веб-страницы из-за наложения на мобильных устройствах?

Определить, скрыта ли веб-страница из-за наложения, например, системного уровня на мобильном устройстве (уведомление о входящем звонке, управление громкостью или переключение приложений), может быть непросто. API видимости страницы (Page Visibility API, document.visibilityState) обычно не обнаруживает такие случаи, так как страница технически остается "видимой" для браузера.

Почему visibilityState может не работать

  • Системные наложения не обязательно вызывают событие visibilitychange, так как страница всё ещё считается "видимой" для браузера.
  • Браузер может не распознавать такие наложения как изменение состояния видимости страницы.

Альтернативные подходы

Для обнаружения таких ситуаций можно использовать косвенные методы, такие как мониторинг взаимодействий пользователя, фокусировки окна или тайминговых механизмов. Вот несколько стратегий:

1. Обнаружение потери фокуса

Отслеживайте события window.onblur и window.onfocus. Эти события могут срабатывать, когда появляется или исчезает системное наложение, хотя это зависит от типа наложения и поведения браузера.

let isHiddenByOverlay = false;

window.addEventListener('blur', () => {
  console.log('Страница может быть скрыта наложением.');
  isHiddenByOverlay = true;
});

window.addEventListener('focus', () => {
  console.log('Страница снова активна.');
  isHiddenByOverlay = false;
});

2. Тайм-аут активности

Отслеживайте взаимодействие пользователя (например, движения мыши, касания или нажатия клавиш). Если в течение разумного времени не происходит взаимодействий, а visibilityState остаётся "видимым", можно предположить наличие наложения.

let lastActivityTime = Date.now();

const resetActivityTimer = () => {
  lastActivityTime = Date.now();
};

document.addEventListener('mousemove', resetActivityTimer);
document.addEventListener('touchstart', resetActivityTimer);
document.addEventListener('keydown', resetActivityTimer);

setInterval(() => {
  if (Date.now() - lastActivityTime > 10000 && document.visibilityState === 'visible') {
    console.log('Страница может быть скрыта наложением или неактивна.');
  }
}, 5000);

3. Изменения CSS и события изменения размеров

Некоторые наложения могут вызывать изменения в области просмотра или макете страницы. Отслеживайте события resize и наблюдайте за необычными изменениями.

window.addEventListener('resize', () => {
  console.log('Область просмотра или макет могли измениться.');
  // Дополнительная логика для обнаружения наложений
});

4. Использование requestAnimationFrame (для анализа производительности)

Можно измерять частоту кадров или отзывчивость анимаций. Значительное падение частоты кадров может указывать на наложение, влияющее на рендеринг.

let lastFrameTime = Date.now();

const detectOverlay = () => {
  const now = Date.now();
  if (now - lastFrameTime > 500) { // Обнаружение задержек кадров
    console.log('Возможно, обнаружено наложение (низкая отзывчивость).');
  }
  lastFrameTime = now;
  requestAnimationFrame(detectOverlay);
};

detectOverlay();

Комбинирование подходов

Для большей надежности объедините несколько сигналов, таких как: - Отсутствие взаимодействия с пользователем - События blur - Падение частоты кадров - Отсутствие значительных обновлений контента

Ограничения

  • Нет полной гарантии: Эти методы дают лишь косвенные признаки, но не являются абсолютно точными из-за разнообразия наложений на устройствах и браузерах.
  • Системные наложения: Некоторые наложения полностью находятся вне контроля браузера и не могут быть обнаружены программно.

Если эти методы не полностью соответствуют вашим потребностям, можно рассмотреть возможность подачи запроса на улучшение браузеров, чтобы расширить возможности visibilityState для таких случаев.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.