ZX Forum
#04
19 ноября 1997 |
|
Технология спрайтов - часть 3: форматы спрайтов.
ТАКИЕ РАЗНЫЕ СПРАЙТЫ Настал момент разобраться с форматами спрайтов и способами их хранения. Мы с Вами большин- ство спрайтов нашли при помощи поиска спрайтов и лишь один - при помощи поиска символов. Из чего можно сделать вывод - не- символьный формат хранения удо- бней, нежели символьный. Чтобы понять, в чем их различия, да- вайте взглянем на формат, в ко- тором они хранятся в памяти. Для примера возьмем спрайт размером в 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 (хотя мы и не экономили пус- тые знакоместа) байтов. Отсюда вывод: экономии можно достиг- нуть лишь при большом количес- тве пустых знакомест, что встре- чается крайне редко, а вот про- цедура печати сильно усложняет- ся. Возможно, есть еще какие-либо форматы спрайтов, но мне они не встречались, и мы переходим к рассмотрению масок.
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября