Баннер записи 'Изнанка. Дневник разработки #5'

Изнанка. Дневник разработки #5

Постановка проблемы

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

Мысли, мысли и ещё раз мысли!

У нас тайловая карта, и раньше я думал про рейкасты на каждый кадр, но это быстро станет проблемой для быстрой работы. Нужно решение, которое:

  • работает быстро;
  • хорошо смотрится в пиксель‑арте;
  • даёт чёткую обратную связь.

Была идея сделать механику как в Project Zomboid или SIMS , где части тайлов целиком становятся прозрачными (такой некий дизеринг, только крупнее) , просто рисовать силует игрока за стеной. Но потом я подумал, а почему бы не создать простенький шейдер , который позволит нарисовать круг в центре игрока и заставить этот круг вырезать кусок слоя из тайла. Так и пришла идея работать в этом направлении.

Проход 1. Подводные камни

Изначально я пошёл самым очевидным путём — использовать экранные координаты в шейдере. Круг действительно появлялся вокруг игрока, но стоило изменить масштаб камеры или разрешение окна, как отверстие начинало смещаться. Всё работало нестабильно и требовало постоянного пересчёта координат. Стало понятно, что такой подход не подходит для проекта.

В итоге я полностью изменил архитектуру эффекта. Вместо экранных координат шейдер теперь использует мировые координаты тайлов и самого игрока.

Фактически шейдер работает непосредственно в пространстве игрового мира.

Проход 2. Матрица Байера

Передний слой стены больше не рисуется автоматически движком. Вместо этого он отрисовывается вручную через шейдер, который определяет расстояние до игрока и создаёт отверстие нужного размера. Мне не хотелось использовать обычную полупрозрачность. Она плохо смотрится в пиксельной графике и делает изображение немного "мыльным". Поэтому вместо изменения альфа-канала используется дизеринг и этот метод очень подходит пиксельным играм.

Внутри определённого радиуса стена полностью исчезает, а по краям появляется пиксельное растворение с помощью матрицы Байера. Получается эффект, который больше напоминает старые консольные игры и отлично сочетается с общим стилем проекта.

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

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

Войдите, чтобы написать комментарий

Войти
Large Spinner
Изнанка
Версия 0.0.1
3.71
188
29
3
5
Жанр
ShooterRoguelike
Движок
GameMaker Studio
Платформа
Windows
Язык
RU
Время игровой сессии
до 10 мин.
Дата публикации игры
04.07.2026
Дата обновления игры
21.07.2026