Как я могу эффективно загрузить большую TileMap

Я хочу сделать игру на выживание с как можно большей тайловой картой. Я использую игровой движок Love2D с lua. В настоящее время я создаю карту с 2d-массивом. Это хорошо работает, возможно, для карты размером 10x10 плиток. Я хочу сделать их максимально большими. Не менее 1000х1000-100000х100000. Но этот джуат выиграл работу. Я тоже думал о том, чтобы разделить его на куски, но я понятия не имею, как это сделать. Разделил бы я эти куски на другие маленькие тайловые карты? Или как я мог это сделать? Может кто-нибудь помочь мне?


person GR00G0    schedule 13.12.2016    source источник
comment
Добро пожаловать в переполнение стека. Этот вопрос слишком широк, прочитайте stackoverflow.com/help/how-to-ask.   -  person Mikkel    schedule 13.12.2016
comment
Что вы пробовали? У вас есть минимальный пример того, что у вас работает? Кроме того, я согласен с @Mikkel, это слишком широко. Может помочь простой поиск карты загрузки по чанкам.   -  person DavisDude    schedule 20.12.2016


Ответы (1)


Почитайте немного о «разделении пространства» в целом. Обратите внимание на дерево BSP/Quadtree/k-D, это строительные блоки практически для всего.

Если ваши фрагменты имеют одинаковый размер, расположены в регулярной сетке и имеют ограниченный общий размер, вы можете значительно упростить все.
Храните фрагменты в файлах под именами, состоящими из индексов фрагментов по осям x/y. Такое имя будет действовать как идентификатор чанка, а файловая система будет работать как БД, хранящая мир. Некоторые фрагменты могут отсутствовать полностью, это означает, что в этой части мира ничего нет.
Когда вам нужно показать часть карты на экране, вы проверяете, загружены ли уже нужные фрагменты. Вы знаете координаты части, которую нужно показать, вы строите id чанка, проверяете какой-то кеш (lua-таблицу), и если чанка там нет - пробуете открыть файл с таким же именем. Если файл успешно загружен - добавьте его в кеш, если нет - добавьте пустой фиктивный файл, чтобы показать, что показывать нечего.

person Vlad    schedule 13.12.2016
comment
Итак, для каждого отдельного фрагмента я должен сохранять их в отдельном файле? Например, когда у меня есть фрагменты 500x500, это будет 250000 файлов? И показывать загруженные в таблице lua, это правильно? - person GR00G0; 14.12.2016
comment
Да, если каждый чанк заполнить данными, то это будет 250к файлов. Или это может быть один файл базы данных. Love2D поддерживает библиотеку sqlite3 db через подключаемый модуль, подробности см. на вики Love2D: love2d.org/wiki/SQLite3 - person Vlad; 14.12.2016