Работа с бесконечными / огромными мирами в ActionScript 2
Как бесконечные / огромные процедурные миры достигаются с минимальной задержкой в ActionScript 2? В такой игре, как Terraria или Minecraft, например. Как лучше всего справиться с таким огромным миром?
Очевидно, что перебирать каждый блок и перемещать их таким образом не получится. Я попытался поместить блоки в 50x50 "кусков", а затем переместить каждый из них, но результат не так гладок, как следовало бы.
Есть ли способ полностью отключить участки карты, если рядом с ними нет игрока? Можно ли было просто хранить их в памяти и загружать при необходимости?
Любая помощь приветствуется, спасибо!
1 ответ
Если ваша игра преимущественно основана на тайлах, то есть в мире есть блоки такого же размера, что и его базовая единица, наиболее практично хранить ваш мир в массиве. Вместо того, чтобы размещать свои блоки вручную, массив, подобный следующему, может хранить ключи, которые соответствуют определенным типам блоков:
"grass" "grass" "grass" "water" "water"
"grass" "water" "water" "water" "water"
"grass" "grass" "woods" "woods" "woods"
"grass" "grass" "woods" "woods" "woods"
"grass" "grass" "woods" "woods" "woods"
"grass" "grass" "grass" "woods" "woods"
Представьте, что в приведенном выше примере игрок может видеть только девять блоков одновременно, т.е.
"grass" "woods" "woods"
"grass" "woods" "woods"
"grass" "woods" "woods"
Это игрок на позиции 2,2 в мировом массиве.
Всякий раз, когда игрок движется, его позиция относительно массива увеличивается или уменьшается соответственно. Таким образом, движение вверх к уменьшит значение позиции до 2,1 и загрузит блоки, расположенные дальше на север.
Из массива вы могли бы извлечь, что блоки выше "water" "water" "water"
и загрузит три water
MovieClips. На всякий случай этот ответ показывает, как динамически загружать мувиклипы.
Кроме того, быстрый способ переместить игрока относительно мира, вместо того, чтобы переместить весь мир относительно игрока, состоит в том, чтобы изменить значения _root._x
а также _root._y
,
В конце концов, если игра слишком требовательна к графике, рассматривали ли вы возможность пересекать мир по системе "на основе комнаты", где положение игрока не является фиксированным, и каждые пятьдесят блоков или около того переходят на новый экран блоков? Это легко уменьшит нагрузку.
AS2 идеально подходит для работы с простыми играми, которые вы хотите быстро запустить и запустить, хотя природа AS3 может быть более подходящей для динамической загрузки многих объектов.