Программирование стратегических игр с DirectX 9.0

bda5893f

Использование блоков для экономии памяти


Давайте для примера возьмем карту игры WarcraftIII, ширина которой равна 100 блокам, и высота также равна 100 блокам. Подобная сетка карты изображена на рис. 5.3.


Использование блоков для экономии памяти

Рис. 5.3. Пример карты для размещения блоков

Пока ничего особенного, вы просто получили карту размером 100 x 100 блоков. Всего получается 10 000 блоков. Теперь представим, что в качестве карты вы решили использовать не блоки, а одно большое растровое изображение. Чтобы вычислить объем требуемой для карты памяти, вы должны умножить общее количество блоков на размер одного блока. Эту концепцию демонстрируют следующие вычисления:

100 блоков в ширину * 100 блоков в высоту = 10 000 блоков

64 точки в ширину * 64 точки в высоту = 4 096 точек в блоке

10 000 блоков * 4 096 точек * 1 байт (8 бит) = 40 960 000 байтов (256 цветов)

10 000 блоков * 4 096 точек * 4 байта (32 бита) = 163 840 000 байтов

Ничего себе! Посмотрите на результат. Простая карта, размером 100 x 100 блоков требует для своего хранения колоссального объема памяти — 163 Мбайт. Даже если вы решите ограничиться 8-разрядным цветом (256-ю цветами), все равно придется выделить 41 Мбайт только для хранения карты. Если вы не читаете эту книгу в 2008 году, 163 Мбайт только для хранения игровой карты — это слишком много.

Хорошо, теперь, когда вы видели темную сторону, настало время для небольшого просвещения. Возьмем предыдущий пример, и вычислим объем памяти, необходимый для хранения той же карты размером 100 x 100, но в этот раз с использованием блоков.

100 блоков в ширину * 100 блоков в высоту = 10 000 блоков

64 точки в ширину * 64 точки в высоту = 4 096 точек в блоке

100 блоков * 4 096 точек в блоке * 4 байта на точку = 1 638 400 байт

10 000 блоков * 1 байт на блок = 10 000 байт

10 000 байт + 1 638 400 байт = 1 648 400 байт всего

Взгляните на результат. Используя набор из 100 блоков вы можете создать карту размером 100 x 100, заняв всего два мегабайта памяти. Черт, вы можете использовать набор из 1000 блоков, и вам понадобится менее 20 Мбайт памяти.

Итак, вот что мы имеем. Первая причина для использования блоков в ваших стратегических играх заключается в экономии памяти.



Содержание раздела