Проблема размера мозаичной 2-й карты мира - PullRequest
0 голосов
/ 09 мая 2011

Привет всем, я создаю игру XNA на основе 2D-плитки.В основном персонаж может двигаться в любом направлении по одной плитке за раз.Я использую редактор карт Tiled: http://www.mapeditor.org/ для создания моей карты.Я не нашел ни одного хорошего учебника или документации по этому вопросу.

Вот моя проблема:

Я пытаюсь загрузить в игру очень большую карту мира.Каждое сеточное пространство имеет размер 32х32 пикселя.Сама карта имеет размер 1000x1000 гридов.На первый взгляд это кажется плохим из-за размера.Когда я загрузил эту WorldMap в свою игру, XNA вызвала ошибку нехватки памяти, потому что изображение было слишком большим.Я чувствую, что подхожу к этому с неправильной точки зрения.Кто-нибудь знает лучший способ обработки большой карты мира?Было бы неплохо загружать только то, что видит персонаж, но это было бы намного эффективнее, но это не решило бы мою проблему загрузки этого огромного изображения.Другой идеей было бы уменьшенное изображение для каждой области, но я не уверен, как это сделать, поскольку это мир.Любые идеи, советы, учебники, я уверен, что это общая проблема, которая была решена несколько раз с использованием нескольких различных решений.Спасибо!

1 Ответ

2 голосов
/ 09 мая 2011

Когда я создавал 2d игру XNA, я делал:

  1. Мой собственный формат файла двоичной карты. Этот файл содержит имя карты, ширину и высоту карты в тайлах и т. Д. И массив карт. Это был просто байтовый массив (byte []), где каждое значение соответствует типу тайла.
  2. Тип плитки. Это просто простой класс с некоторыми свойствами: стоимость перемещения (-1, если игрок не может перемещаться по этой плитке), какие типы существ могут жить в этой плитке, изображения плиток и т. Д.
  3. Типы плиток дБ. Это просто XML-файл, содержащий типы листов.

Итак, когда игра загружает уровень:

  1. Загрузите карту и найдите в плитке типа db плитки, которые использовались на этой карте.
  2. Загрузить соответствующие изображения для этой плитки. Только однажды. Его можно использовать для разных плиток одного типа.
  3. Нарисуйте только видимые (для игрока) плитки с некоторым запасом. В качестве примера нарисуйте только screen_width / tile_size_y * 2 по ширине и screen_height / tile_size_y * 2 по высоте. Когда игрок перемещается, перечитайте видимые плитки.
...