Мне всегда нравилось использовать 2D-массивы и писать 2 функции:
- Функция для хранения массива в виде строки
- Функция для преобразования строки обратно в 2D массив
Эти функции будут частью класса LevelManager
, который также будет иметь некоторые функции, подобные этой:
load(levelData:String):void
- загружает уровень на основе строки данных уровня
unload():void
- выгружает текущий уровень
swap(levelData:String):void
- выгружает текущий уровень и затем загружает новый уровень - хорошая функция для вставки анимации прерывания.
save():String
- сохраняет текущий уровень (перебирает текущих врагов и создает новые данные уровня, которые будут возвращены
objectFromSnip(snip:String):void
- создать объект из фрагмента (т. Е. Один объект, представленный строкой - см. Ниже). Я обычно разбиваю нижнюю часть на $
, а затем перебираю результирующие наборы свойств и вызываю для них эту функцию.
Данные уровня могут выглядеть так:
object#x#y$object2#x#y
Где $
представляет разделение объектов, а #
представляет разделение свойств для этого объекта.
Массивное представление этого будет:
[
[object, x, y],
[object2, x, y]
]
Что касается создания объекта, то в основном вы хотите:
- Используйте
getDefinitionByName()
для создания вашего объекта. В основном здесь происходит то, что вы замените object
и object2
выше именами ваших классов. т.е.: game.terrain.Grass#20#450
- Примените
x
, y
и любые другие пользовательские свойства к вашему объекту, созданному выше.
- Добавить объект в игру
Надеюсь, это поможет. Если нет, попробуйте использовать XML для создания объектов, аналогичных описанным выше.
Кроме того, вы можете увидеть этот подход на практике , глядя на мою игру здесь .
Если вы используете редактор уровней, вы сможете увидеть данные вашего уровня на экране закрытия, который может выглядеть примерно так:
2#36#20#o$t#12#12#w$t#12#16#w$t#12#24#w$t#12#28#w$t#12#20#w$g#20#11#o$1#24#21#o#200#110
Примечание к первому свойству каждого объекта, оно на самом деле представляет собой большую строку для сохранения компактности данных уровня, например:
var shorthand:Object = {
2: "game.objects.WoodenWall",
g: "game.objects.Gate",
t: "game.objects.Turret"
};
и т.д.