sergey_st
@sergey_st

Как реализовать генерацию карты?

Начал изучать phaser и геймдев в целом, решил начать с шутера с видом сверху. Тут, вроде, всё просто и никаких особых проблем. Теперь хочу немного усложнить задачу и сделать генерацию карты - просто рандомно расставлять заготовленные заранее стены и препятствия прямо на ходу при открытии новой территории. Хотелось бы сделать бесконечную карту, но тогда через несколько минут хождений по карте, скорее всего, игра начнет тормозить, а еще через несколько минут - жутко тормозить. Как лучше всего реализовывать генерацию и хранение карты за пределами видимости?
  • Вопрос задан
  • 259 просмотров
Решения вопроса 3
@Sha644
Гуглим "frustum culling".
Если хотите "бесконечное", то генерацию нужно бы делать с привязкой к константам. Ядро\сид, к этому координаты например. Таким образом хранить только некий условно выверенный кусок, остальное удалять(в пул базовые компонентны) и генерировать снова(доставать из пула уже сгенерированных по сути) при приближении. Но это типичный pitfall новичков в геймдизайне. Игровое поле обычно условно бесконечное. Подумайте ещё раз, действительно ли вам нужно бесконечные карты. Это именно то, что будет продавать игру(интересовать игрока)? Очень сомневаюсь.
Ответ написан
dollar
@dollar
Стандартный подход - объекты за пределами камеры (т.е. за пределами определенного радиуса вокруг каждого игрока) делать "неактивными" и исключать их из обработки и расчётов.

Кстати, "бесконечная карта на лету" - не так уж и просто реализовать. Проще сгенерировать всю карту, пусть даже это займёт минуту, пометить все объекты как неактивные, и потом уже подключать их по мере перемещения игроков по карте.
Ответ написан
kreo_OL
@kreo_OL
Медузко -_-
Возможно есть более изящное решение но я однажды делал так:

- Разбивал координаты на небольшие куски. Например 5x5 метров.
- Определял сколько таких кусков по мещается на экране.
- При старте уровня генироваровал сразу карту размеров 3х3 экрана.
- При перемещение игрока генерировал следующие плитки.
- Для производительности просто отключал клетки которые игрок не видит.
- Клетки которые уже на достаточном удаление от игрока - удалял.
- Если игрок обратно к ним возвращался, заново создавал из сохраненной информации.

- Информацию о местности хранил в двумерном массиве
- Если массив сильно разрастался, то выгружал из него данные о местности с которой игрок уже ушел в файл.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
profesor08
@profesor08
Рано или поздно у тебя случится переполнение или упрешься в нехватку памяти. Тебе надо обыграть это так, чтоб только казалось, чтоб мир бесконечен. Двигай не персонажа а мир вокруг него, двигай и подставляй текстуру поверхности, переставляй объекты.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы