Потратив сегодня время на то, чтобы записать некоторые заметки о внедрении стен в мою игру на основе плиток, я внезапно осознал, что все будет не так просто, как я представлял раньше. Хотя нынешний этап моей работы даже не близок к созданию кода, связанного со стеной, я предложил три различных способа сделать это. Прямо сейчас я не уверен, какая из моих идей будет работать лучше, и пропустил ли я что-то или нет.
Важно: персонаж МОЖЕТ стоять на плитке со стенами независимо от их формы.
Общее для всех трех вариантов: карта тайлов будет «храниться» в одномерном контейнере на основе std :: vector (или аналогичного). Причины этого (удивительно) объясняются в ответах на другой вопрос.
Контейнерные классы в играх на основе тайлов.
Вернуться к стенам.
А) Простой подход.
Здесь нет ничего особенного. Каждый контейнер-мозаика может содержать не только символы, но и один или несколько объектов стены, которые прикреплены к краю внутри плитки.
Плюсы: простота реализации, ничего не менять в двигателе. Минусы: две вещи. Один - это может быть только у меня в голове, но некоторые комбинации выглядят просто безобразно. Второе - такой подход позволяет сделать двойную стену из двух соседних плиток. Строительство будет важной частью игры, а двойные стены позволяют строителям, возможно, отказаться от улучшения материала стен с помощью игровых средств и просто добиться увеличения срока службы за счет удвоения существующей стены. Это не желательно. Конечно, я мог бы включить процедуру, которая запрещает двойное ограждение, но к нему будет плохо относиться.
Б) Умный (?) Подход.
Вместо того, чтобы дать игрокам двойную стенку всей карты, я собираюсь победить их. Каждая стена имеет две половинки, которые прикреплены к краю плитки изнутри. Таким образом, чтобы создать единый «Стенной блок», мне нужно создать два объекта Half-Wall в двух смежных плитках.
Плюсы: это симметрично !!! Кроме того, не требуется значительного изменения текущих характеристик двигателя. Минусы: больше хлопот, больше предметов и, конечно же, «шапки». Как вы можете видеть на картинке, угол в основном будет плакать за объект «шапка». Я на самом деле круто с этим, это не так сложно добавить. Привет, у меня уже есть план для тонких колонн, сделанных из четырех соединенных колпачков. Милая. Тем не менее, у меня есть некоторые опасения по поводу возможных проблем поля зрения и прямой видимости.
В) вариант капитального ремонта.
Или я мог бы просто создать границы и углы как отдельные контейнеры для игровых объектов. Просто так.
Плюсы: даже не уверен. Ну, это просто. Определенно. Минусы: это потребует капитального ремонта. К счастью, не кода, а менталитета игровой механики - это точно. Преимущества не так очевидны. Кроме того, этот подход требует гораздо больше контейнеров, чем два предыдущих. Индексирование математики также будет немного болезненным.
Итак, у нас это есть - три разных способа сделать стены между плитками. Если есть какие-либо альтернативы - я буду рад их проверить. Если есть какие-либо преимущества / недостатки любого из подходов, которые я не видел, пожалуйста, укажите их.