СТРУКТУРА СПРАЙТОВЫХ БЛОКОВ
Это, пожалуй, одна из самых
объемных и запутанных частей
данного повествования. В ней я
расскажу о том, как уживаются в
памяти спрайт и маска, какие
данные помогают нам оперативно
находить адрес спрайта в памяти
и многое другое.
Наконец-то я затрону в своем
рассказе остальные найденные на-
ми спрайты. Посмотрите на них,
они не случайно имеют разный
вид. Такое на первый взгляд не-
значительное обстоятельство, как
маска, находящаяся с разных сто-
рон от спрайта, вовсе не являет-
ся незначительным. Именно от ее
расположения относительно спрай-
та зависит скорость печати
спрайта, а также внешний вид и
играбельность программы.
Давайте посмотрим на спрайт
из игры 3D BATMAN. Здесь маска
и спрайт являются отдельными
спрайтами и печатаются по очере-
ди - это довольно обычный способ
хранения спрайтов, но печать та-
кого спрайта занимает много вре-
мени (разумеется, это понятие
относительно, и все зависит от
таланта программиста). Следующий
спрайт из программы ELEFANT-1
интересен уже тем, что тут нес-
колько непонятно, что же, соб-
ственно, на нем изображено. Ну,
а если попробовать и соединить
между собой, точнее, поставить
по порядку без пробелов, знако-
места 1, 3, 5, а рядом с ними 2,
4, 6. Не правда ли, теперь все
понятно и даже красиво.
Это еще один способ хранения
в памяти маски и спрайта, ко-
торый, на мой взгляд, наиболее
удачен, и при печати затрачива-
ет очень мало времени. Это, так
скажем, шахматный способ хране-
ния спрайта, когда чередуются
байт маски и байт спрайта.
Программа JAK THE NIPPER-2
предлагает нам еще один способ
хранения спрайтов, когда маска и
спрайт являются одним большим
спрайтом. В данном случае прог-
рамма печати работает довольно
быстро, хотя и уступает предыду-
щему способу.
О символьном формате я рас-
сказывать не буду, поскольку об
этом много написано. Вы можете
прочитать о этом формате в жур-
налах "ZX-Ревю" или книге "Как
написать игру на ассемблере"
фирмы "Питер". Там же вы найде-
те программы для печати таких
спрайтов.
Теперь о том, какие данные
призваны помочь нам в работе со
спрайтами.
Я могу выделить два типа не-
символьных блоков спрайтов (да-
лее я буду говорить только о не-
символьных спрайтах, поэтому бу-
ду использовать слово спрайты) -
это блоки, состоящие из спрайтов
одинакового размера, и второй
тип - блоки разнородных спрай-
тов. В первом случае заголовок у
спрайтов минимален - это 2 бай-
та - длина и высота спрайтов, а
также 2 байта (часто достаточно
1) - длина одного спрайта в бай-
тах. Этих данных достаточно,
чтобы быстро находить нужный
спрайт в памяти и так же быстро
их печатать.
Со вторым типом блоков слож-
нее, тут четырьмя байтами на
весь блок не отделаться. В этом
случае существует два способа:
1) перед блоком спрайтов состав-
ляется таблица, в которой каждо-
му спрайту отводится 4 байта - 2
байта длина и высота спрайта и
еще 2 байта - адрес спрайта в
памяти. Вместо конкретного адре-
са иногда указывают смещение до
спрайта, в этом случае спрайты
можно перемещать в памяти. Та-
кой тип таблицы давайте назовем
отдельным; 2) второй тип табли-
цы можно назвать сквозным. Здесь
нет отдельной таблицы, но перед
каждым спрайтом ставят все те же
4 байта с небольшой разницей: 2
байта - длина и высота спрайта
(этого) и 2 байта - адрес/смеще-
ние до СЛЕДУЮЩЕГО спрайта.
Поскольку отдельная таблица
была описана первой, о ней мы
сначала и поговорим. Подобный
формат заголовка самый опти-
мальный, так как обеспечивает
самый быстрый доступ к спрайту,
тогда как второй способ требует
специальной программы для опре-
деления местоположения спрайта в
памяти. Надо отметить еще один
момент - при прямой адресации
(когда указан конкретный адрес
спрайта) перемещение спрайтов в
памяти становится невозможным, а
заголовок блока спрайтов допол-
няется еще 2 байтами (для всего
блока), которые сообщают адрес
фиксации, то есть относительно
какого адреса были фиксированы
спрайты.
В некоторых играх спрайты не
одноцветные, а цветные, поэтому
помимо маски и спрайта к ним
присоединяются еще и данные ат-
рибутов. Атрибуты хранятся в том
же формате, что и спрайты, но
здесь есть один момент - для
маски атрибуты НЕ НУЖНЫ, обрати-
те на это внимание, чтобы не
расходовать лишнюю память.
Еще одна рекомендация - высо-
ту спрайта лучше всего сразу за-
давать в пикселях, дабы при пе-
чати не тратить на ее вычисле-
ние время.
После рассмотрения всех ос-
новных вопросов, касаемых форма-
тов спрайтов, мы переходим к ча-
сти практической и рассмотрим
различные процедуры печати
спрайтов.