Как написать игру для ZX Spectrum на ассемблере

       

БЫСТРЫЙ ВЫВОД СПРАЙТОВ



БЫСТРЫЙ ВЫВОД СПРАЙТОВ

Что бы ни появлялось на экране во время игры - спрайты или какие-либо тексты - каждое изображение состоит из отдельных символов. Таким образом, чтобы быстро выводить сложные картинки, нужно начать с самого простого - печати произвольного символа в текущую позицию экрана. Раньше мы поручали эту задачу процедуре RST 16, которая неплохо справлялась со своими обязанностями до тех пор, пока отдельные кадры изображения не слишком быстро сменяли друг друга. Безусловно, ее и дальше вполне можно использовать в подобных ситуациях. Однако, когда речь заходит о создании динамических картинок, а именно такие мы чаще всего наблюдаем после загрузки наиболее интересных игровых программ, она уже перестает нас удовлетворять. Изображения начинают временами пропадать и, конечно же, теряется естественное восприятие событий.

Во 2-й главе мы приводили пример небольшой программки на Бейсике, которая печатала букву A, и сказали, что по такому принципу работает любая процедура вывода символов на экран. Теперь перепишем ее на ассемблере и как основу используем для составления подпрограмм вывода спрайтов. До того, как этот фрагмент появится в программе, необходимо в регистровой паре DE задать адрес символа в наборе, в HL - рассчитанный начальный адрес знакоместа:

......... LD B,8 MET1 LD A,(DE) LD (HL),A INC DE INC H DJNZ MET1 .........

Ниже приводится процедура PRSYM, которая, так же как и RST 16, выводит на экран отдельные символы в текущее знакоместо экрана с учетом заданных атрибутов, но работает она приблизительно в 10 раз быстрее. Конечно же даром ничего не дается и увеличение быстродействия достигается за счет урезания выполняемых ею функций. Например, с ее помощью невозможно выводить тексты на принтер, печатать символы UDG и псевдографики, а также ключевые слова Бейсика. Не «воспринимает» она и управляющие коды. Тем не менее, PRSYM в тех или иных модификациях используется дальше в нескольких программах. Например, в одной из них показывается, как рисовать на экране лабиринты, различные орнаменты или рамки произвольной конфигурации.



Содержание раздела