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



              

Перемещение спрайта скроллингом окна - часть 2


К сожалению, этот способ перемещения спрайта тоже не лишен недостатка, видного невооруженным глазом: вместе с изображением, действительно подлежащим удалению, спрайт как ластик сотрет вообще весь фон позади себя. Справиться с этим можно точно так же, как мы рекомендовали выше, - выводить спрайт на сплошной фон, лишенный сложного пейзажа, что приемлемо для ограниченного числа игровых сюжетов. В качестве иллюстрации приведем программу, которая передвигает по экрану слева направо маленького динозавра, перебравшегося к нам из игры LITTLE PUFF:

ORG 60000 ENT $ XOR A CALL 8859 LD A,7 LD (23693),A CALL 3435 LD A,2 CALL 5633 ; Основная часть программы LD C,-4 MOVE LD B,10 LD A,SPRPUT LD HL,DIN PUSH BC CALL PTBL LD BC,10 CALL 7997 POP BC INC C LD A,C CP 32 JP M,MOVE ;если координата меньше 32 (с учетом знака) RET ; Подпрограмма вывода спрайта

; Заголовок данных для «динозавра» DIN DEFB 16,0,0,4,0,1,4,0,2,4,0,3,4 DEFB 1,0,4,1,1,4,1,2,4,1,3,4 DEFB 2,0,4,2,1,4,2,2,4,2,3,4 DEFB 3,0,4,3,1,4,3,2,4,3,3,4 ; Данные: DEFB 0,0,0,0,0,0,0,0 DEFB 0,0,0,0,0,0,0,0 DEFB 0,0,0,0,0,70,117,42 DEFB 0,0,0,0,0,64,160,64 DEFB 0,0,0,0,0,0,0,0 DEFB 0,0,2,6,11,21,46,31 DEFB 78,72,110,52,123,111,96,31 DEFB 192,128,219,173,71,254,127,0 DEFB 0,0,0,0,0,0,0,0 DEFB 53,100,85,181,20,4,0,0 DEFB 205,188,63,119,103,231,55,185 DEFB 248,0,0,192,224,240,208,224 DEFB 0,0,0,0,0,0,0,0 DEFB 0,0,0,0,0,0,1,0 DEFB 28,57,67,167,156,191,157,0 DEFB 24,120,184,48,38,140,96,0 DEFB 0,0,0,0,0,0,0,0

Программа содержит всего один цикл и настолько проста, что в дополнительных комментариях не нуждается.

Третий способ использует вывод спрайтов на экран по принципу XOR, который заложен в процедуре PTBL (как, впрочем, и другие). Применение принципа XOR для объединения изображений позволяет легко справиться с проблемой восстановления фона при перемещении спрайтов. Перечислим вначале все операции, которые должна выполнить программа:

  • спрайт помещается на экран процедурой PTBL, в режиме XOR;
  • через некоторое время (должен же спрайт немного побыть на экране) вторично выполняется процедура PTBL для того же спрайта, опять же по принципу XOR, при этом он стирается;



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