ZX Forum #04
19 ноября 1997

Технология спрайтов - часть 6: подготовка данных к печати.


  ПОДГОТОВКА ДАННЫХ ДЛЯ ПЕЧАТИ

   Перед  тем   как   напечатать
спрайт на экране, мы должны под-
готовить для  этого  необходимые
данные, дабы при печати  не  от-
влекаться на эти детали.
   Давайте выделим несколько пе-
ременных, в которых у нас  будут
храниться данные:

   COORD - координаты печати 1 -
Y, 2 - X.
   LENHGT  -  длина  спрайта  (в
знакоместах)  и  его  высота  (в
пикселях).
   ADRSPR - адрес данных спрайта
в памяти.

   А теперь  давайте  посмотрим,
как же нам поместить нужные дан-
ные в эти переменные. Ранее мы с
вами уже  говорили  о  различных
способах хранения данных  и  со-
ответственно  о  разных   блоках
спрайтов и заголовков к ним. Для
начала заполним  эти  переменные
для спрайтов одинакового  разме-
ра. Одним из  параметров  такого
блока является полная длина  од-
ного спрайта (длина маски + дли-
на спрайта + (если  есть)  длина  
атрибутов):
   На входе в регистре A  должен
быть номер спрайта (нумеруются с
0).  На выходе в переменной ADR-
SPR будет адрес спрайта, в пере-
менной LENHGT его длина и  высо-
та.
140.
ODINAK  LD   HL,SPRDATA+4  ;В HL адрес данных спрайтов. Посколь-
                           ;ку первые 4 байта составляют заголо-
                           ;вок, мы их пропускаем.
        AND  A             ;Если номер спрайта 0, переходим.
        JR   Z,ODINAK1
        LD   B,A           ;Организуем цикл.
        LD   DE,LINESPR    ;В DE длина одного спрайта.
        ADD  HL,DE         ;Складываем.
        DJNZ $-1           ;Завершаем цикл.
ODINAK1 LD   (ADRSPR),HL   ;В переменную заносим адрес данных
                           ;спрайта.
        LD   HL,(ZAGOLOWOK);В HL длина и высота спрайта, которые
                           ;указаны в заголовке блока спрайтов
                           ;(помните, там должны быть эти  дан-
                           ;ные).
        LD   (LENHGT),HL   ;В переменную их.
        RET                ;Выход.
2
   Теперь  перейдем  ко  второму
типу блоков спрайтов - разнород-
ным спрайтом, то есть спрайты  в
этом блоке  могут  иметь  разные
размеры. Переменные остались  те
же, при входе в  подпрограмму  в
регистре  A  должен  быть  номер
спрайта (нумерация с 0). Для на-
чала  заполним  переменные   для
ОТДЕЛЬНОЙ таблицы:
140.
OTDEL  LD   L,A          ;Заносим номер спрайта в регистр L.
       LD   H,#00        ;Обнуляем H.
       ADD  HL,HL        ;Так как на каждый спрайт в таблице от-
                         ;водится 4 байта, умножаем номер спрай-
                         ;та на 4.
       ADD  HL,HL
       LD   DE,SPRDATA   ;В DE адрес таблицы.
       ADD  HL,DE        ;Получаем в HL адрес данных о спрайте.
       LD   E,(HL)       ;Заносим в DE адрес самого спрайта, для
                         ;чего читаем данные по адресу в  регис-
                         ;тре HL.
       INC  HL
       LD   D,(HL)
       INC  HL
       PUSH HL
-------------------------
       LD   HL,SPRDATA   ;Мы с Вами уже говорили, что вместо ко-
                         ;нкретного адреса спрайтов может указы-
                         ;ваться смещение до спрайта  от  адреса
                         ;загрузки. Если было  задано  смещение,
                         ;то и в регистре DE у нас к  этому  мо-
                         ;менту находится  смещение  до  нужного
                         ;нам  спрайта.  Чтобы  получить   адрес
                         ;спрайта, мы к смещению прибавляем  ад-
                         ;рес загрузки.  Если  задавался  адрес,
                         ;эти две строки нужно убрать.
       ADD  HL,DE
-------------------------
OTDEL1 LD   (ADRSPR),HL  ;Заносим в переменную адрес данных
                         ;спрайта.
       POP  HL

140.       LD   C,(HL)       ;Заносим в BC длину и высоту, на кото-
                         ;рые указывает HL.
       INC  HL
       LD   B,(HL)
       LD   (LENHGT),BC  ;Заносим в переменную длину и высоту.
       RET               ;Выход.
2
   Теперь  заполним  данные  для
СКВОЗНОЙ таблицы. Переменные ос-
тались те же.
140.
SKWOZ  LD   HL,SPRDATA   ;В HL адрес загрузки спрайтов.
       AND  A            ;Если номер спрайта 0, переходим.
       JR   Z,SKWOZ1
       LD   B,A          ;В B номер спрайта, организуем цикл.
SKWOZ2 LD   E,(HL)       ;Заносим в DE адрес следующего спрайта.
       INC  HL
       LD   D,(HL)
       EX   DE,HL
-------------------------
       LD   DE,SPRDATA   ;Мы с Вами уже говорили, что вместо ко-
                         ;нкретного адреса спрайтов может указы-
                         ;ваться смещение до спрайта  от  адреса
                         ;загрузки. Если было  задано  смещение,
                         ;то и в регистре DE у нас к  этому  мо-
                         ;менту находится  смещение  до  нужного
                         ;нам  спрайта.  Чтобы  получить   адрес
                         ;спрайта, мы к смещению прибавляем  ад-
                         ;рес загрузки.  Если  задавался  адрес,
                         ;эти две строки нужно убрать.
       ADD  HL,DE
-------------------------
SKWOZ3 DJNZ SKWOZ2       ;Закрываем цикл.
SKWOZ1 INC  HL           ;В HL адрес данных спрайта.
       INC  HL           ;Увеличиваем  HL на два. Теперь HL ука-
                         ;зывает на длину и высоту спрайта. Вре-
                         ;менно сохраняем.
       PUSH HL
       INC  HL           ;Увеличив HL еще на 2, мы получим адрес
                         ;данных спрайта.
       INC  HL
       LD   (ADRSPR),HL  ;В переменную заносим адрес данных
                         ;спрайта.
       POP  HL           ;Восстанавливаем HL.
       LD   C,(HL)       ;В BC заносим длину и высоту.
       INC  HL
       LD   B,(HL)
       LD   (LENHGT),BC  ;В переменную их.
       RET               ;Выход.
2
   Ну вот, теперь Вы сможете ра-
ботать практически с  любым  ти-
пом заголовков. Основное  разли-
чие  между  разными  программами
формирования  спрайтов   состоит
именно  в  формате  формируемого
ими  заголовка.  Мы  рассмотрели
основные, и Вам не составит тру-
да переделать эти процедурки для
немного измененных  типов  заго-
ловков.



Другие статьи номера:

Help - Описание оболочки электронного издания "ZX-FORUM 4".

Секреты успешного дизайна - глава для книги "Дизайн Ваших программ"

Экранные эффекты - Бегущая строка из R-Type.

Экранные эффекты - гашения экрана из Zynaps.

Экранные эффекты - "сворачивание" экрана из Comando Tracer.

Экранные эффекты - плавное "затухание" экрана из Сommando Tracer.

Экранные эффекты - модификация символьного набора для получения оригинального стилизованного шрифта из игры Rockstar.

Экранные эффекты - "выбегающая строка" из игры Rockstar.

Экранные эффекты - "наливающийся" экран из игры Rockstar.

Экранные эффекты - сложный многоступенчатый эффект из игры Bubbler.

Новые 40 лучших процедур - скроллинг экрана, слияние двух картинок, инвертирование экрана, поворот символов, замена атрибутов, заливка замкнутого контура, вычисление адресов в экране, копирование части экрана и т.д.

Технология спрайтов - часть 1: введение.

Технология спрайтов - часть 2: охота на спрайты (поиск и выдирание).

Технология спрайтов - часть 3: форматы спрайтов.

Технология спрайтов - часть 4: форматы спрайтов с маской.

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

Технология спрайтов - часть 6: подготовка данных к печати.

Технология спрайтов - часть 8: печать спрайтов (координаты заданы в знакоместах).

Технология спрайтов - часть 9: печать спрайтов (координаты заданы в пикселях).

Технология спрайтов - часть 10: обзор программ для работы со спрайтами и графикой.

Мир звуков Спектрума - глава 1: Физика звука.

Мир звуков Спектрума - глава 2: Оператор BEEP, Создание эффектов на BEEPе, Создание музыки на BEEPе.

Мир звуков Спектрума - глава 3: Как получается звук (устройство BEEP'ра и способы звукоизвлечения).

Мир звуков Спектрума - глава 4: Программирование звука на ассемблере.

Мир звуков Спектрума - глава 4.1: Программирование звуковых эффектов - Тон, Шум, Комплексы эффектов.

Мир звуков Спектрума - глава 4.2: Программирование звуковых эффектов - Управление громкостью.

Мир звуков Спектрума - глава 4.3: Программирование звуковых эффектов - Управление тембром.

Мир звуков Спектрума - глава 4.4: Программирование звуковых эффектов - Программирование музыки.

Мир звуков Спектрума - глава 4.5: Программирование звуковых эффектов - Многоголосые мелодии (полифония).

Мир звуков Спектрума - глава 4.6: Обработка внешних сигналов - оцифровка.

Мир звуков Спектрума - глава 4.7: Обработка внешних сигналов - Реверберация.

Мир звуков Спектрума - глава 4.8: Синтезирование речи.

Мир звуков Спектрума - глава 4.9: воспроизведение звука на прерываниях.

Мир звуков Спектрума - глава 5: Оператор PLAY для музыкального сопроцессора AY- 3-8910 (AY-3-8912).

Мир звуков Спектрума - глава 5.1: Создание эффектов оператором PLAY.

Мир звуков Спектрума - глава 5.2: Создание музыки на PLAYе.

Мир звуков Спектрума - глава 6.1: описание регистров музыкального сопроцессора AY- 3-8910 (AY-3-8912).

Мир звуков Спектрума - глава 6.2: Программирование эффектов и музыки под музыкальный сопроцессор AY- 3-8910 (AY-3-8912).

Мир звуков Спектрума - глава 7: Обзор программного обеспечения ZX-Spectrum для создания звуков и музыки.

Мир звуков Спектрума - глава 7.1: Редактор звуковых эффектов SUPER SOUND.

Мир звуков Спектрума - глава 7.2: Музыкальный редактор Wham the Music Box.

Мир звуков Спектрума - приложения 1, 2: листинги звуковых эффектов SUPER SOUND'а, советы по использованию ассемблера.


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Предисловие - Глючный номер.
Предисловие - в г.Минске появилась модемная связь для ZX-SPECTRUM!
Список BBS - Список работающий BBS.

В этот день...   25 августа