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


         

БЫСТРЫЙ ВЫВОД СПРАЙТОВ - часть 4


; Таблица переходов на процедуры для управляющих кодов TABLE DEFB 13 DEFW PR_13 DEFB 16 DEFW PR_16 DEFB 17 DEFW PR_17 DEFB 18 DEFW PR_18 DEFB 19 DEFW PR_19 DEFB 20 DEFW PR_20 DEFB 21 DEFW PR_21 DEFB 22 DEFW PR_22 DEFB 0

Покончив с текстами, перейдем к описанию программы, которая выводит на экран спрайт произвольной конфигурации, но сначала стоит сказать несколько слов о том, что собой представляют спрайты с точки зрения программиста. Мы уже описывали работу со спрайтами и вам известно, что в принципе - это блоки данных, организованные определенным образом. Надо сказать, что существует множество различных форматов спрайтов. Например, формат спрайтов, принятый в Laser Basic отличается от того, который используется в Beta Basic, а тот, который хотим предложить мы, в свою очередь, не похож ни на первый, ни на второй, и все они отличаются от того, который мы продемонстрировали в предыдущих главах. Главным критерием в выборе формата блока данных является способ вывода спрайта на экран. Представляемый нами способ, быть может, не самый оптимальный в плане быстродействия, но зато программа имеет минимальные размеры при максимальном количестве возможностей. Так, например, спрайт может частично или даже полностью выходить за пределы экрана, а вывод может быть осуществлен по любому известному принципу объединения изображений (то есть с замещением либо по AND, OR или XOR). Для упрощения программы спрайт будет выводиться по символам, как и в описанной ранее процедуре .

Начнем с разработки формата спрайтов, который зависит от способа вывода графики, а затем, привязываясь к формату, напишем соответствующую процедуру вывода спрайтов на экран (строго говоря, разработка формата спрайтов и процедуры их вывода должны протекать параллельно, так как одно от другого неотделимо).

Блок данных, описывающий каждый спрайт, будет состоять из двух частей: заголовка, включающего в себя относительные координаты и атрибуты для каждого знакоместа (эта часть будет напоминать формат спрайтов для процедуры ), и данных о состоянии пикселей (по 8 байт на знакоместо - как в символьном наборе). Заголовок будет начинаться указанием общей площади спрайта, или иначе - количества знакомест, составляющих спрайт. Для этого достаточно одного байта, что позволит создавать спрайты площадью до 255 знакомест. Затем для описания каждого символа потребуется по 3 байта, как и в процедуре :




    Содержание  Назад  Вперед