Бесшовная прокрутка tilemaps


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

У меня есть два способа разрушить мир. На верхнем уровне у меня есть "зоны", которые представляют собой просто набор из 9"карт" (эти зоны представлены только каталогами). В пределах зоны 9 карт организованы в сетку 3x3. Я еще не придумал, как лучше всего представить эти карты. тем не менее, будь то по индексу или по относительной координате к родительской зоне. Эти карты-то, что на самом деле визуализируется на экране пользователя. Учитывая размер каждой карты и размер окна просмотра, я знаю, что пользователь сможет увидеть максимум четыре карты, когда они находятся в углу карты.

Моя проблема заключается в том, как я могу отслеживать карты и их соответствующие смещения в коде, когда игрок исследует мир? Я думал о том, чтобы иметь map<Point, Map*> с 0,0, являющейся картой игрок в данный момент находится внутри. Если игрок находится в нижнем левом углу карты, то карта на восток будет храниться в виде 1,0, карта на юг будет равна 0,1, а карта на юго-восток будет равна 1,1. Проблема, которую я предвижу с этим, заключается в том, что я не уверен, что точки изменчивы, и если перестраивать список каждый раз, когда игрок перемещается на другую карту или другой раздел карты, это вызовет проблему.

4 3

4 ответа:

Это в точности похоже на то, что я пытаюсь сделать с игрой, которую я пишу на FreeBASIC. То, что я делаю, немного отличается, но, возможно, это может помочь.

У меня есть карта мира 1024^2 (так что я могу генерировать ее фрактально). Каждый квадрат земли на карте мира - это карта региона (миниатюрное королевство с процедурной историей), но я сделал карты регионов очень простыми в создании. Карты регионов-128^2, и у меня есть четыре из них в массиве 256^2. Когда вы приближаетесь к краю он перемещает карты и создает 2-3 новых региона (хотя это только одна история-регион, в котором находится игрок).

Внутри них находятся 256^2 карты зон,которые также укладывают 2x2 в массив 512^2. Опять же, при приближении к краю он движется и генерирует новые.

Некоторое время назад я попробовал сетку 3x3, но был вынужден отклонить ее как неэффективную.

Рассмотрим Деку из деков. Таким образом, вставки и удаления на всех 4 сторонах легко.

Ну, если у вас есть массив карт с указателями 3x3 и у вас есть 0,0 в верхнем левом углу, что вы можете сделать, если вы войдете в комнату к северу от Вас, Вы можете просто сделать что-то вроде maps[1,1] = maps[1,0]; переместите каждую карту вниз на одну и перезагрузите верхнюю строку.

Удачи! Надеюсь, вы найдете эффективное решение!

Предложение: видовой экран.

Я работал над GPS-устройством, которое определяло большую область для рисования, но экран определял только часть или видовой экран всей области. Прокрутка включала перемещение видового экрана (или изменение места в памяти дисплея) и перезагрузку экрана (с помощью графического чипа).

Концепция подобна сетке 3x3. Окно просмотра начинается в центре. Двигаясь влево, изменяет адрес для отображения памяти.

Надеюсь, что это помогает.

Кстати, это была встроенная система, в которой приложение могло на 100% контролировать все аппаратные устройства (и не делиться с другими приложениями).