ТАКИЕ РАЗНЫЕ СПРАЙТЫ
Настал момент разобраться с
форматами спрайтов и способами
их хранения. Мы с Вами большин-
ство спрайтов нашли при помощи
поиска спрайтов и лишь один -
при помощи поиска символов. Из
чего можно сделать вывод - не-
символьный формат хранения удо-
бней, нежели символьный. Чтобы
понять, в чем их различия, да-
вайте взглянем на формат, в ко-
тором они хранятся в памяти. Для
примера возьмем спрайт размером
в 2 знакоместа в длину и 1 в вы-
соту:
┌─ 1 байт ─┬─ 2 байт ─┐ ┌─ 1 байт ─┬─ 9 байт ─┐
├─ 3 байт ─┼─ 4 байт ─┤ ├─ 2 байт ─┼─10 байт ─┤
├─ 5 байт ─┼─ 6 байт ─┤ ├─ 3 байт ─┼─11 байт ─┤
├─ 7 байт ─┼─ 8 байт ─┤ ├─ 4 байт ─┼─12 байт ─┤
├─ 9 байт ─┼─10 байт ─┤ ├─ 5 байт ─┼─13 байт ─┤
├─11 байт ─┼─12 байт ─┤ ├─ 6 байт ─┼─14 байт ─┤
├─13 байт ─┼─14 байт ─┤ ├─ 7 байт ─┼─15 байт ─┤
└─15 байт ─┴─16 байт ─┘ └─ 8 байт ─┴─16 байт ─┘
несимвольный символьный
Если Вы внимательно взгляне-
те на рисунок, то увидите, что
символьный спрайт хранится в па-
мяти как шрифт компьютера, то
есть в виде набора символов, ко-
торые печатаются на экран в оп-
ределенной последовательности.
Такие спрайты возможно печа-
тать простым оператором бейсика
PRINT, если перед этим указать в
переменной, которая хранит ад-
рес шрифта, адрес нашего спрай-
та минус 256 байт. В машинных
кодах можно воспользоваться ко-
мандой RST #10. Основную работу
по печати спрайтов мы переклады-
ваем на ПЗУ компьютера и, каза-
лось бы, это и хорошо. Но такие
спраты крайне медленно печатают-
ся на экран, и если в Вашей про-
грамме много ДВИЖУЩИХСЯ объек-
тов, медлительность станет очень
заметна. Такой формат подходит
для печати статических или мало-
подвижных спрайтов, как, напри-
мер, в программе KRAKOUT. В жур-
налах мы могли видеть и отличные
от используемых в ПЗУ принципов
печати, которые работают во мно-
го раз быстрее, но все же недос-
таточно быстро.
Что касается несимвольного
формата спрайтов, то здесь Вам
ПЗУ не поможет, и программу для
печати Вам придется создавать
самим, но этот способ хранения
спрайтов обеспечивает оптималь-
ную по скорости печать.
Существует еще один символь-
ный формат хранения спрайтов,
который еще более медлителен,
чем предыдущий. Я бы не стал
на нем останавливаться, но этот
формат пропагандируют в "ZX Ре-
вю" (отдельные корреспонденты),
а также в интереснейшей книге
фирмы "Питер" "Как написать игру
на ассемблере".
Давайте рассмотрим этот фор-
мат.
Метод основан на том, что пу-
стые знакоместа (где виден пун-
ктир) пропускаются и в спрайте
не сохраняются. Это сохраняет
несколько байтов, но привносит в
процедуру печати сложность в ее
организации, а также трудоем-
кость в описание спрайта. Посмо-
трите, каким образом он хранится
в памяти:
ЗАГОЛОВОК:
DATA 26 (количество знакомест в
спрайте).
DATA 0,0,7,0,1,7,0,4,7,0,5,7
(первый ряд знакомест)
DATA 1,0,7,1,1,7,1,2,7,1,3,7
и так далее.
ДАННЫЕ.
Далее идут данные знакомест в
виде шрифта.
На описание каждого знакомес-
та, помимо его данных, отводится
еще 3 байта: первый - координа-
та Y, которая отсчитывается от
левого верхнего угла окна; вто-
рой - координата X, которая от-
считывается также от левого вер-
хнего угла; и третий байт -
атрибуты (ink, paper, bright,
flash в одном). В нашем случае
пустыми остаются 4 знакоместа, а
спрайт занимает в памяти 287
байтов, тогда как если бы мы
сохранили его в форме несим-
вольного спрайта, он занимал бы
240 (хотя мы и не экономили пус-
тые знакоместа) байтов. Отсюда
вывод: экономии можно достиг-
нуть лишь при большом количес-
тве пустых знакомест, что встре-
чается крайне редко, а вот про-
цедура печати сильно усложняет-
ся.
Возможно, есть еще какие-либо
форматы спрайтов, но мне они не
встречались, и мы переходим к
рассмотрению масок.