#алгоритм #разработка_игр #архитектура #графика
Имеется простая 2D игра с видом сверху и в профиль (как в Heroes of Might and Magic
III). Игровая карта - тайловая, процедурно генерируемая, её размер - не ограничен.
По мере перемещения персонажа подгружаются новые участки карты (чанки), другие удаляются.
Каждый объект, который должен отображаться на экране, содержит компонент GraphicsInfo,
который в свою очередь хранит такие данные как позиция на экране, размеры и т.д. Идея
заключается в том, чтобы в части программы, отвечающей за отрисовку, хранить коллекцию
всех этих объектов удобным для отрисовки способом.
Но появилась сложность - при выгрузке чанков из памяти нужно как-то определять, какие
именно объекты GraphicsInfo там находились и удалять их из коллекции.Все осложняется
ещё тем, что загрузка и выгрузка чанков осуществялется в отдельном потоке. Поэтому
хранить объекты в самих чанках и удалять их оттуда непосредственно при выгрузке не
хотелось бы, т.к. задача сильно усложняется проблемой синхронизации разных потоков.
Вопрос: как проверить - какие объекты находились на выгруженных чанках? Хотелось
бы чтобы код отвечающий за загрузку и выгрузку карты был как можно меньше связан с
кодом отвечающим за отрисовку объектов.
Ответы
Ответ 1
По идее, вы храните объекты (или ссылки на них, не суть) в чанках. Загрузили чанк - добавили его объекты к отрисовке. Выгрузили чанк - убрали его объекты из отрисовки. Для упрощения, можете в каждом объекте добавить поле "к какому чанку он относится". Тогда удаление станет еще проще. Хотя, чанки обычно квадратные и вычислить чанк по расположению объекта проще простого. Все операции по добавлению и удалению, естественно нужно делать в критических секциях (или других объектах синхронизации), во избежании ошибок.
Комментариев нет:
Отправить комментарий