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



              

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


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

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

    ORG 60000 ENT $ LD A,4 LD (23693),A XOR A CALL 8859 CALL 3435 LD A,2 CALL 5633 ; Рисование пейзажа, состоящего из дороги и стены CALL GRUNT ; Вывод первой фазы спрайта «солдат» в режиме XOR LD B,9 ;задаем координату Y LD C,-3 ;начальное значение координаты X LOOP LD A,SPRXOR ;устанавливаем режим вывода LD HL,SOLD1 ;задаем адрес спрайта 1 фазы PUSH HL PUSH BC CALL PTBL LD BC,20 ;задержка спрайта на экране CALL 7997 POP BC POP HL ; Повторный вывод первой фазы спрайта в режиме XOR LD A,SPRXOR PUSH HL PUSH BC CALL PTBL POP BC POP HL INC C ;увеличиваем координату X ; Вывод второй фазы спрайта «солдат» в режиме XOR LD A,SPRXOR LD HL,SOLD2 ;задаем адрес спрайта 2 фазы PUSH HL PUSH BC CALL PTBL LD BC,20 CALL 7997 POP BC POP HL ; Повторный вывод второй фазы спрайта в режиме XOR LD A,SPRXOR PUSH HL PUSH BC CALL PTBL POP BC POP HL INC C ;увеличиваем координату X LD A,C ;количество шагов солдата CP 32 ;проверка условия конца «дороги» JP M,LOOP RET ; Подпрограмма рисования пейзажа GRUNT EXX PUSH HL LD BC,#4700 ;начало горизонтальной линии (B=71, C=0) CALL 8933 ; Рисование «дорожки» LD DE,#101 LD BC,250 CALL 9402 ; Рисование «стены» LD BC,#915 ;B = 9, C = 21 STEN PUSH BC LD A,SPRPUT ;устанавливаем режим вывода LD HL,STENA ;задаем адрес спрайта «стена» CALL PTBL POP BC INC B LD A,B CP 13 JR C,STEN POP HL EXX RET




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