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



              

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


; Заголовок данных первой фазы спрайта «солдат» SOLD1 DEFB 10 DEFB 0,0,7, 0,1,7, 1,0,7, 1,1,7 DEFB 2,0,7, 2,1,7, 2,2,7 DEFB 3,0,7, 3,1,7, 3,2,7 ; Данные первой фазы спрайта «солдат» DEFB 1,4,13,27,91,35,28,3 DEFB 128,32,112,184,182,140,56,192 DEFB 12,16,19,15,15,7,3,27 DEFB 8,32,12,156,192,152,172,192 DEFB 60,63,114,45,31,47,112,123 DEFB 250,7,0,183,160,44,192,56 DEFB 0,0,2,255,96,224,0,0 DEFB 51,7,1,6,12,19,30,15 DEFB 220,220,216,33,27,11,135,134 DEFB 0,0,0,128,64,192,128,0 ; Заголовок данных второй фазы спрайта «солдат» SOLD2 DEFB 9 DEFB 0,0,7, 0,1,7, 1,0,7, 1,1,7 DEFB 2,0,7, 2,1,7, 2,2,7 DEFB 3,0,7, 3,1,7 ; Данные второй фазы спрайта DEFB 3,8,26,55,183,71,56,7 DEFB 0,64,224,112,108,24,112,128 DEFB 24,32,38,31,31,15,7,55 DEFB 16,64,24,56,128,48,104,128 DEFB 121,254,239,200,178,127,62,204 DEFB 244,14,251,0,239,65,91,0 DEFB 0,0,0,8,252,128,128,0 DEFB 243,111,15,0,6,6,1,15 DEFB 184,184,184,0,48,214,173,239 ; Заголовок спрайта «стена» STENA DEFB 2 DEFB 0,0,7, 0,1,7 ; Данные спрайта «стена» DEFB 0,223,223,223,0,253,253,253 DEFB 0,223,223,223,0,253,253,253

Четвертый способ основан на принципе записи части экранного изображения в буферную область памяти с последующим его возвратом на экран. Сначала поясним суть этого способа, а затем приведем небольшую программу, которая его иллюстрирует. В программе ГЕНЕРАТОР СПРАЙТОВ для сохранения образа экрана в памяти использовалась процедура GTBL и чтобы не писать еще одну подпрограмму, применим ее же для пересылки в буфер фрагмента экранного изображения. Вставляя эту процедуру в программу, следует предварительно внести в нее небольшие изменения:

  • убрать первые четыре строки (до CALL OUT_BT);
  • все команды CALL OUT_BT заменить на
  • LD (IX),A INC IX

  • в самом конце процедуры GTBL (непосредственно перед инструкцией RET) убрать команды PUSH IX и POP BC;
  • внутренняя подпрограмма OUT_BT также не нужна, поэтому ее можно опустить.
  • В остальном все остается без изменений. Поскольку экранное изображение сохраняется в памяти, нужно позаботиться о выделении для этих целей некоторого рабочего буфера. Чтобы буфер не перекрыл занятую программой память, следует знать не только адрес его начала (который, кстати, понадобится для возврата полученного процедурой GTBL изображения), но и его размер. Вычислить его можно исходя из принятого нами формата спрайтов: количество знакомест (N_SYM) плюс заголовок (N_SYMґ3) плюс данные (N_SYMґ8). Итого получится N_SYMґ11+1. Для небольших спрайтов вполне можно включить буфер в саму программу, воспользовавшись директивой ассемблера




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