Каковы некоторые хорошие подходы к процедурной генерации бесконечного 2d уровня? Уровень может быть ограничен в любом измерении, но не обязательно.
Подход, который имеет для меня наибольшее значение, использует радиус на основе сетки. Например, разделите игровую зону на сетку с квадратами определенного размера, а затем загрузите квадраты Х в радиусе вокруг игрока. Затем, когда игрок переходит к другому квадрату, строит следующий набор и опускается дальше (Сохранение исследуемой области не требуется.) Когда квадрат построен, он содержит случайное расположение объектов. Когда объекты покидают внешнее кольцо квадратов, они удаляются из мира. Есть ли лучшие или другие способы? Или, если это хороший подход, каковы потенциальные проблемы?
Ради обсуждения, вы можете думать об уровне как о нисходящем астероидном поле с повторами и т. Д., Разбросанными повсюду.
источник
Ответы:
Проблема с «бесконечными» мирами состоит в том, что ваши базовые координаты не могут быть бесконечными. Иногда, если игра замедляет игрока достаточно, это может не беспокоить, потому что, например, время достижения целочисленной обертки может быть слишком большим, чтобы его можно было достичь. Но если вы допускаете большие различия в скорости, вам может потребоваться быть очень точным и очень далеко идущим, чтобы вам приходилось думать о своих координатах. Разумным решением было бы иметь два уровня, такие как целочисленные координаты вашей сетки и плавающие координаты в каждой ссылке на сетку.
Кроме того, вы можете даже сохранить правильное расположение вашего мира, используя координаты сетки в качестве начального числа для создания своего случайного мира в данном квадрате. Таким образом, когда игрок покидает область, вы можете уронить его, а когда игрок вернется, вы можете восстановить его обратно из семян.
источник
float pos = 1000000000.0f; float nextPos = pos + 0.001f; float diff = nextPos - pos;
на моей машине diff равно 0.