Как бороться с анимированными дверями в изометрической плитке

10

У меня есть хитрая проблема, я не уверен, как лучше всего решить: у меня есть анимированная плитка двери. Когда он закрыт, он должен быть отсортирован в одну сторону, но когда он открыт, его нужно будет отсортировать по-другому, так как он принадлежит другому (соседнему тайлу).

Вот дверь закрыта:

дверь закрыта

и дверь открылась:

дверь открылась

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

Кто-нибудь сталкивался с подобным сценарием? Какие-нибудь элегантные решения?

Георгий Профенца
источник
2
Как ваша система сортировки в настоящее время определяет порядок прорисовки тайлов?
Рой Т.

Ответы:

4

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

Ничего
источник
4

Создать три спрайта ...

  1. Дверь закрыта (как ваш первый спрайт) - блокирует движение
  2. Только рама (в вашем случае пост) двери, но без двери - не блокирует движение
  3. Просто дверь в открытом положении - блокирует движение

Когда дверь закрыта, нарисуйте спрайт 1 и рассматривайте его как «блокиратор», чтобы игроки не могли пройти через него.

Когда дверь открыта, замените этот спрайт на # 2 (только столбик двери). Затем поместите спрайт № 3 (только дверь) в соседнюю камеру, в которой будет находиться дверь.

Закрытие - это просто удаление двери и замена стойки на столб + дверь в закрытом положении.

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

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

Тим Холт
источник
3

Есть два трюка, которые я использую для сортировки в 2D:

  • Добавьте позицию земли к спрайтам, это точка, в которой спрайт касается земли (например, женские ноги, ствол дерева, дверная рама) и сортирует ее вместо пикселей спрайтов. Таким образом, спрайт не будет зависеть от анимации

  • Добавьте несортируемые дочерние объекты к объектам (например, у мужчин может быть несколько дочерних элементов, которые не влияют на сортировку - плащ, лук, меч и т. Д., Дверная коробка имеет дочернюю дверь). Таким образом, анимация дочерних спрайтов также не влияет на сортировку.

Kromster
источник
1

Лучший способ решить сортировку объектов - это вообще не сортировать. Если вы используете буфер глубины, вы можете визуализировать все за один проход. Объекты с более высоким z-значением будут дальше, чем объекты с более низким z-значением.

Даже если ваша игра 2D, вы все равно должны рассмотреть возможность использования трехмерных координат с буфером глубины, иначе вы навсегда запутаетесь в алгоритме художника .

knight666
источник
Правда, а как определить Z позицию? Только путем сортировки
Kromster
Да, но эта сортировка теперь происходит в автономном режиме, а не во время рендеринга. Теперь дизайнер уровней может строить уровень с учетом значений Z, не беспокоясь об обрезании объектов.
knight666