|
ZX Forum
#04
19 ноября 1997 |
|
Технология спрайтов - часть 5: структура спрайтовых блоков (как уживаются в памяти спрайт и маска, какие данные помогают нам оперативно находить адрес спрайта в памяти и многое другое.)

СТРУКТУРА СПРАЙТОВЫХ БЛОКОВ Это, пожалуй, одна из самых объемных и запутанных частей данного повествования. В ней я расскажу о том, как уживаются в памяти спрайт и маска, какие данные помогают нам оперативно находить адрес спрайта в памяти и многое другое. Наконец-то я затрону в своем рассказе остальные найденные на- ми спрайты. Посмотрите на них, они не случайно имеют разный вид. Такое на первый взгляд не- значительное обстоятельство, как маска, находящаяся с разных сто- рон от спрайта, вовсе не являет- ся незначительным. Именно от ее расположения относительно спрай- та зависит скорость печати спрайта, а также внешний вид и играбельность программы. Давайте посмотрим на спрайт из игры 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 байтами (для всего блока), которые сообщают адрес фиксации, то есть относительно какого адреса были фиксированы спрайты. В некоторых играх спрайты не одноцветные, а цветные, поэтому помимо маски и спрайта к ним присоединяются еще и данные ат- рибутов. Атрибуты хранятся в том же формате, что и спрайты, но здесь есть один момент - для маски атрибуты НЕ НУЖНЫ, обрати- те на это внимание, чтобы не расходовать лишнюю память. Еще одна рекомендация - высо- ту спрайта лучше всего сразу за- давать в пикселях, дабы при пе- чати не тратить на ее вычисле- ние время. После рассмотрения всех ос- новных вопросов, касаемых форма- тов спрайтов, мы переходим к ча- сти практической и рассмотрим различные процедуры печати спрайтов.
Другие статьи номера:
Похожие статьи:
В этот день... 1 января
SibNews #08,
Woot! #01,
Spectrum Magazine #01,
ACNews #25,
Psychoz #14,
ACNews #14,
Last 128 #08,
Last 128 #06,
Last 128 #05,
Last 128 #04,
Last 128 #03,
Last 128 #02,
Last 128 #09,
Last 128 #3.5,
Last 128 #8.025,
Sinclair Club #05,
Last 128 #M!R 01,
Fantadrom #01,
Buzz #20,
Last 128 #01,
DonNews #13,
Nicron #120,
Promised Land #01,
Inferno #01,
Marazm #25,
Ultimathum #01,
Marazm #21,
Hooy Mag #02,
KrNews #11,
Marazm #22,
Marazm #23,
ZX Football 2000 #01,
Codemania #01,
Always #03,
Bugs #02,
IzhNews #08,
Virtual Worlds #01,
Listok #04,
Scenergy #02,
Flash Info #18,
Marazm #16,
Marazm #17,
Zed #01,
Balagan #02,
ZX Format #08,
ZX Power #03,
Shock #01,
Impulse #02,
Deja Vu #03,
ZX Club #08,
ZX Club #06,
Numberology #01,
Marazm #13,
Marazm #12,
Marazm #14,
Gorodok #02,
Zodiac #01,
Marazm #15,
Deja Vu #07,
Marazm #11,
Deja Vu #07,
Playboy #03,
Crazy News #2,
Crazy News #4,
ZX Light #01,
Crazy News #5,
Playboy #02,
ZX News #03,
ZX Review #1-2,
Read Me #02,
Crazy News #3,
Nicron #13,
Read Me #01,
Public Spirit #01,
Faultless #06,
Faultless #05,
ZX Software #01,
Stump #04,
Speccy #07,
Возраждение #0,
Speccy #03,
On-Line #17,
Scene+ #01,
Welcome Press #01,
ZX Konig #04,
Adventurer #01,
Faultless #05,
Faultless #04,
Di Halt #01,
Faultless #01,
Playboy #01,
Crazy News #1,
Faultless #03,
Pioneer #03,
Sinclair Town #02,
ZX Magazine #01,
Eldorado #01,
ZX Magazine #02,
Spectron #01,
ZX News #01,
ZX Konig #02,
200 #W,
Welcome Press #00,
Dune #07,
Subliminal Extacy #01,
Subliminal Extacy #02,
ZX Konig #01,
Subliminal Extacy #00,
Muchomor #01,
Spectrofon #01,
ZX Revija #02,
Outlet #01,
Outlet #1-3