У меня есть 2D-стратегия на основе плиток в работах. Я брожу, как справиться с отношениями между картой и единицами на карте.
Учитывая координаты тайла, я должен быть в состоянии заставить юнит стоять на нем, если таковой имеется. В то же время, если мне дадут единицу, я захочу получить координату единицы.
Я видел два решения этого. Первое решение состоит в том, чтобы юниты сохраняли координаты, а юниты карты хранилища ссылались на свои тайлы. Это создает циклическую зависимость между картой и единицами. Мне нужно убедиться, что карта любого юнита синхронизирована, если юнит перемещается.
Второе решение состоит в том, чтобы только единицы отслеживали свои координаты. Чтобы узнать, содержит ли тайл единицу, и чтобы получить эту единицу, я бы перебрал весь набор единиц юнитов, и я нашел одну с соответствующими координатами. Это избавляет от циклической зависимости, но при этом теряется свойство O (1), которое было в первом решении для поиска единиц на карте. Это может сложиться так, как я хочу, чтобы иметь возможность регулярно сканировать карту на предмет таких вещей, как поиск пути, определение диапазона движения и нахождение допустимых целей для данного подразделения.
Я также не могу просто хранить единицы на карте (или я могу?). Юниты связаны с «армиями», будь то игрок или ИИ. Армия должна иметь возможность легко получить доступ и перебирать все свои подразделения.
Так как это кажется распространенной проблемой в стратегических играх, есть ли какие-либо другие шаблоны, кроме двух, которые я описал для управления отношениями юнит / карта?
Ну, если вы не используете несколько тысяч юнитов на игрока, я бы не стал беспокоиться об использовании памяти и использовал бы первое решение. Кажется, память дешевле, чем процессор.
На самом деле, даже если у вас было 4000 юнитов на игрока, используя два целых числа для хранения там местоположения, и 8 игроков, которые занимают всего 2 МБ, но с первым решением вы получаете вместо O (1) координатор, а не O (n) (при условии отсутствия сортировки), что с большим количеством единиц может быть медленным.
Большинство игр, кажется, основаны на пикселях, а не на плитке, и сейчас это дни, поэтому им нужно только получить устройство для хранения кооперативов.
источник