Как сохранить 2D карту тайла? - PullRequest
1 голос
/ 11 августа 2011

Рассмотрите плитки и слои из легенды о Зельде: связь с прошлым.Что было бы идеальным способом сохранить эту карту в редакторе плиток?В настоящее время я использую многомерный массив прямоугольников в качестве одного слоя.Список этих слоев листов состоит из карты.Каждый прямоугольник соответствует прямоугольнику из набора плиток.Однако проблема заключается в том, что редактирование размера карты (ширина, высота и количество слоев) должно быть разрешено при редактировании карты.

В настоящее время, когда кто-то редактирует размеры карты, я просто создаю новый массивс указанными размерами.Это работает нормально, но теперь, когда я добавляю поддержку Undo и Redo, это начинает усложнять ситуацию, потому что каждый раз, когда пользователь меняет размеры карты, я должен сохранять копию всей карты перед каждым изменением.Теперь я рассматриваю другие способы.

Было бы лучше иметь размер карты MAX и просто создать массив такого размера при запуске, чтобы мне не приходилось так часто создавать новые массивы и копировать данные?А как насчет того, чтобы использовать List of List вместо многомерного массива?

Я не уверен, что я чувствую по поводу моей текущей настройки.Первоначально я был в порядке с этим, но теперь у меня есть вторые мысли.В настоящее время я вообще не замечаю замедления, так что, возможно, я делаю преждевременную оптимизацию (что, конечно, плохо), и мне следует просто забыть обо всем этом посте.Я не уверен.Я хотел бы услышать, что вы все думаете.

1 Ответ

0 голосов
/ 11 августа 2011

Для операций Undo / Redo можно смело предположить, что для этого не требуется оптимизация по следующим причинам.

1) Операция отмены / возврата не очень часто будетбудет использоваться для изменения размеров карты.Обычно при редактировании карты размеры меняются не очень часто.

2) Даже если используется операция отмены / возврата, повторное создание массива не должно быть большой проблемой.

Вы можете хранить «Плитку» как свой собственный объект, и каждый элемент в массиве должен быть ссылкой на объект «Плитка».На 32-разрядном компьютере карта 256x256 должна требовать 256 КБ для ссылок на листы, а карта 1024x1024 будет 4 МБ для ссылок на листы.Данные в самих тайлах могут оставаться в памяти и не могут быть перемещены.

Копия массива 4 МБ не займет заметного промежутка времени на современном компьютере.

Если размеры данных должны быть больше, лучшим решением будет предупредить пользователя о том, что изменениеразмеры не могут быть отменены.Пользователь должен сохранить копию карты перед изменением размеров.Опять же, размеры будут меняться не очень часто, и поскольку карты обычно меняются после изменения размеров, в любом случае пользователь может иметь склонность иметь копию предыдущей версии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...