Недавно я планировал, как запустить игру со средой / картой, которая может иметь неограниченные размеры (неограниченное количество - это бесполезные условия, поскольку очевидно, что объем данных может храниться в памяти и т. Д.).Я достиг этого, используя «сетку», которая содержит данные уровня, хранящиеся в виде строки, которые можно преобразовать в 2D-массив, который будет представлять объекты и их свойства.
Вот пример двух объектов, хранящихся в виде строки:
"game.doodads.Tree#200#10#terrain$game.mobiles.Player#400#400#mobiles"
"Сетка" - это трехмерный массив, содержимое которого будет представлять координату x / y ячейки сетки.Ячейки сетки будут, скажем, 600x600.
Пример этого массива "grid" будет следующим:
var grid:Array = [[["leveldata: 0,0"],["leveldata 0,1"]],
[["leveldata: 1,0"],["leveldata 1,1"]]];
Среда будет обрабатывать загрузку квадрата сетки, и это будет 8 окружающие квадраты, основанные на данной точке.т.е. позиция игрока.Он будет иметь функцию, аналогичную
function loadCells(xp:int, yp:int):void
. Она также будет обрабатывать выгрузку ранее загруженных ячеек, которые больше не находятся достаточно близко, чтобы требовать.В процессе выгрузки данные в сетке [x] [y] будут перезаписаны новыми данными, которые создаются путем циклического перемещения по объектам в этой ячейке и добавления каждого нового набора данных к данным ячейки сетки.
Все работает нормально, когда вы двигаетесь в направлении, ячейки выгружаются / сохраняются и загружаются новые ячейки.Проблема в следующем:
Скажем, это большой город, кишащий зомби.Если вы пройдете три квадрата сетки в любом направлении и вернетесь, все будет так, как вы его оставили.Я изо всех сил пытаюсь найти способ, по крайней мере, симулировать все объекты, которые все еще движутся и делают свое дело.Это выглядит глупо, когда вы, например, бросаете гранату, уходите, возвращаетесь, и граната все еще не взорвалась.
Я рассмотрел сохранение метки времени для каждого объекта, когда выгрузил уровень и когда он инициализированесть цикл, который запускает свою «пошаговую» функцию несколько раз.Проблема здесь, очевидно, в том, что когда вы вернетесь через 5 минут, 20 зомби попытаются сделать шаг 248932489 раз, и игра вылетит.
Идеи?