Динамическая графика 1994 г.

Анимаци в растровой графике - Перемещение спрайтов двойной высоты.


2.1.7. Перемещение спрайтов двойной высоты.

Для перемещения по экрану такого спрайта подготовим процедуру FN j(x,y,d,l,s,c,n). Все параметры, задаваемые при вызове процедуры, те же самые, что и в процедуре FN i(), см. с.61.

Листинг 15. Загрузчик иашинного кода процедуры. управляющей перемещением спрайтов двойной высоты.

10 REM *** Загрузчик машинного кода

20 LET adr=52100: LET long=230: LET check=76012: LET sum=0 30 FOR k=0 TO long-1: READ a 40 POKE (adr+k),a: LET sum=sum+a 50 NEXT k

60 IF sumocheck THEN PRINT "??": STOP 100 REM *** Данные для машинного кода

110

DATA

000,

042,

011,

092

,017

120

DATA

004,

000,

025,

078

,030

130

DATA

008,

025,

070,

025

,126

140

DATA

230,

003,

050,

103

,204

150

DATA

025,

126,

050,

104

,204

160

DATA

025,

126,

230,

001

,050

170

DATA

105,

204,

025,

126

,230

180-

DATA

001,

050,

101,

204

,025

190

DATA

126,

017,

063,

000

,033

200

DATA

009,

213,

025,

061

,032

210

DATA

252,

175,

050,

102

,204

220

DATA

205,

093,

210,

205

,086

230

DATA

204,

197,

229,

017

,063

240

DATA

000,

025,

062,

021

,128

250

DATA

071,

205,

093,

210

,205

260

DATA

086,

204,

225,

193

,197

270

DATA

229,

006,

001,

118

,016

280

DATA

253,

225,

193,

000

,000

290

DATA

118,

205,

196,

209

,197

300

DATA

229,

017,

063,

000

,025

310 DATA 062,021,128,071,205 3?0 DATA 196.209.225.193.058

330

DATA

103,

204,

254

,000,

040

340

DATA

019,

254,

001

,040,

026

350

DATA

254,

002,

040

,033,

005

360

DATA

005,

005,

120

,230,

252

370

DATA

040,

051,

195

,041,

204

380

DATA

013,

013,

013

,121,

230

390

DATA

252,

040,

040

,195,

041

400

DATA

204,

012,

012

,012,

121

410

DATA

214,

231,

048

,029,

195

420

DATA

041,

204,

004

,004,

004

430

DATA

120,

214,

132

,048,

018

440

DATA

058,

102,

204

,254,

000

450

DATA

032,

011,

058

,104,

204

460

DATA

061,

050,

104

,204,

254

470

DATA

000,

032,

128

,058,

105

480

DATA

204,

237,

067

,130,

203

490

DATA

254,

000,

200

,118,

205

500

DATA

093,

210,

017

,063,

000

510

DATA

025,

062,

021

,128,

071

520

DATA

11B,

205,

093

,210,

201

530

DATA

254,

000,

200

,058,

101

540

DATA

204,

254,

000

,200,

062

550

DATA

001,

050,

102

,204,

201

560

DATA

000,

000,

001

,000,

000

Листинг 16 Процедура, управляющая перемещением спрайтов двойной высоты.

Адрес Наш-код Метка Мнемоника_Комментарий 

СВ82 0000 YXLAST DEFW #0000 ;Последние координаты

;у и X. ;По ним можно ;определить, например, ;где произошла коллизия

Адрес

Маш.код

Метка

Мнемоника

Комментарий.

СВ84

00

NOP

СВ85

2А0В5С

LD

HL,(#5C0B)

СВ88

110400

LD

DE,#0004

СВ8В

19

ADD

HL,DE

Ввод параметров

СВ8С

LD

C,(HL)

CB8D

1Е08

LD

E, #08

из БЕЙСИКа.

CB8F

19

ADD

HL,DE

СВ90

46

LD

B,(HL)

СВ91

19

ADD

HL,DE

Настройка

СВ92

LD

A,(HL)

СВ93

Е603

AND

#03

программных

СВ95

3267СС

LD

(DIREC),A

СВ98

19

ADD

HL, DE

переменных

СВ99

LD

A,(HL)

СВ9А

3268СС

LD

(DISTN),A

CB9D

19

ADD

HL, DE

СВ9Е

LD

A,(HL)

CB9F

Е601

AND

#01

СВА1

3269СС

LD

(SWTCH),A

СВА4

19

ADD

HL,DE

СВА5

LD

A,(HL)

СВА6

Е601

AND

#01

СВА8

3265СС

LD

(FLAG) ,A

СВАВ

19

ADD

HL.DE

СВАС

LD

A,(HL)

CBAD

113F00

LD

DE,#003F

Отыскание начала шабло

СВВО

2109D5

LD

HL,#D509

на спрайта по его

СВВЗ

19

LOOP

ADD

HL.DE

номеру.

СВВ4

3D

DEC

A

СВВ5

20FC

OR

NZ,LOOP

СВВ7

AF

XOR

A

Инициализация програм

СВВ8

3266СС

LD

(COLLIZ) ,A

мной переменной.

СВВВ

CD5DD2

BEGIN

CALL

SPRDRV-P

Печать спрайта.

СВВЕ

CD56CC

CALL

COLTST .Проверка была коллизия

;или нет.

Адрес Маш .код Метка Мнемоника_Комментарий 

СВС1

С5

PUSH

ВС

Временное сохранение

СВС2

Е5

PUSH

HL

регистров.

свсз

113F00

LD

DE,#003F

Определение адреса на

CBC6

19

ADD

HL.DE

чала шаблона второго

спрайта.

СВС7

ЗЕ15

LD

A,#15

Увеличение координаты

СВС9

80

ADD

А,В

у на 21 пункт для опре

деления координат пе

СВСА

47

LD

В, A

чати второго спрайта.

СВСВ

CD5DD2

CALL

SPRDRV-P

Печать 2-го спрайта.

СВСЕ

CD56CC

CALL

COLTEST

Проверка коллизии.

CBD1

Е1

POP

HL

восстановление регистров

CBD2

С1

POP

ВС

со стека без очищения

CBD3

С5

PUSH

ВС

стека.

CBD4

Е5

PUSH

HL

CBD5

0601

LD

В.#01

CBD7

76

HALT

CBD8

10FD

D3NZ

#CBD7

Краткая

CBDA

Е1

POP

HL

CBDB

С1

POP

ВС

пауза и восстановление

CBDC

00

NOP

CBDD

00

NOP

координат 1-го спрайта

CBDE

76

HALT

CBDF

CDC4D1

CALL

SPRDRV- S

Стирание первого спрайта

СВЕ2

С5

PUSH

ВС

Сохранение регистров

СВЕЗ

Е5

PUSH

HL

на стеке.

СВЕ4

113F00

LD

DE,#003F

Определение адреса начала

СВЕ7

19

ADD

HL,DE

шаблона 2-го спрайта.

СВЕ8

ЗЕ15

LD

A,#15

Смещение на экране

СВЕА

80

ADD

А,В

на 21 пиксел

СВЕВ

47

LD

В,А ;вниэ.

СВЕС

CDC4D1

CALL

SPR-DRV-S

Стирание второго спрайта.

CBEF

Е1

POP

HL

восстановление регистров

CBFO

С1

POP

ВС

CBF1

ЗА67СС

LD

A,(DIREC)

Направление движения.

Адрес Маш.код Метка Мнемоника

Комментарий

CBF4

FE00

CP

#00

;Влево?

CBF6

2813

JR

Z,LEFT

;Переход, если так.

CBF8

FE01

CP

#01

,Вправо?

CBFA

281А

JR

Z,RIGHT

;Переход, если так.

CBFC

FE02

CP

#02

;Вверх?

CBFE

2821

OR

Z,UP

;Переход, если так.

ССОО

05

DEC

В

;Последний вариант -

СС01

05

DEC

В

;вниз. Уменьшаем на

СС02

05

DEC

В

;3 пункта координату у

ССОЗ

78

LD

А,В

; Проверка на выход за

СС04

E6FC

AND

#FC

Пределы экрана.

СС06

2833

JR

Z, END

;Если выход произошел,

;заканчиваем работу.

СС08

С329СС

JP

CONT

;Иначе продолжаем.

ССОВ

0D

LEFT DEC

С

Уменьшаем на 3 пункта

ССОС

0D

DEC

С

;координату х.

CC0D

0D

DEC

С

;

ССОЕ

79

LD

А,С

;Проверка на выход за

CC0F

E6FC

AND

#FC

пределы экрана.

СС11

2828

JR

Z, END

;Если выход произошел.

;Иначе продолжаем. Увеличиваем на 3 пункта ;координату х.

;Проверка на выход за ;пределы экрана. :Если выход произошел, .'заканчиваем работу. ;Иначе продолжаем. ; Увеличиваем на 3 пункта ;координату у.

; Проверка на выход за ;пределы экрана.

СС13 СС16 СС17 СС18 СС19 СС1А СС1С

СС1Е СС21 СС22 f'C23 JC24 СС25

С329СС

ОС

ОС

ОС

79

D6E7 ЗОЮ

С329СС

04

04

04

78

D684

JP

INC

INC

INC

LD

SUB

JR

JP

INC

INC

INC

LD

SUB

CONT

С С С

А,С #E7

NC,END

CONT В В В

А,В #84

RIGHT

UP

Адрес Маш.код Метка Мнемоника

Комментарий

ЗА66СС

FE00

200В

ЗА68СС

3D

3268СС

FE00

2080

ЗА69СС

ED4382CB

FE00

С8

76

CD5DD2

СС49 СС4С CC4D CC4F СС 50 СС51 СС52

LD

ADD

LD

ADD

LD

HALT CALL

RET

СС55 С9

113F00 19

ЗЕ15 80 47 76

CD5DD2

СС27 3012

СС29 СС2С СС2Е СС30 ССЗЗ СС 34 СС37 СС39 ССЗВ ССЗЕ

СС42 СС44 СС45 СС46

CONT

LD

CP

3R

LD

DEC

LD

CP

JR

LD

LD

CP RET HALT CALL

END

A,(COLLIZ) #00

NZ,END A, (DISTN) A

(DISTN), A #00

NZ,BEGIN A, (SWTCH) (YXLAST) ,ВС

#00 z

SPRDRV-P

DE,#003F HL.DE A,#15

A,В

B,A

SPRDRV-P ;Если выход произошел, ;заканчиваем работу. ;Проверяем, была коллизия или нет. ;Если была, то на выход .-Иначе продолжаем работу. ;Уменьшаем дистанцию ;перемещения спрайта. ;Если не весь путь пока ;пройден - возврат. ;Проверяем параметр а. ;Запомнили последние ;координаты. ;Если в=0, то можно ;выходить из процедуры.

JR NC.END

Иначе надо напечатать спрайт последний раз. Печать верхней половины. Переход к нижней половине спрайта.

Печать нижней половины спрайта.

Окончательный выход.

СС56 FE00 COLTST CP #00

СС58 С8 RET Z

СС59 ЗА65СС

LD A,(FLAG) CP #00

СС5С FE00

;Проверка на ноль и возврат, если коллизии не ;было.

;Если была, проверяем ;флаг детекции коллизии. ;Если он выключен, нет

Адрес Маш.код Метка Мнемоника

Комментарий.

СС5Е

С8

RET

Z

;вопросов и возврат.

CC5F

ЗЕ01

LD

A,#01

; Иначе включаем перемен'

СС61

3266СС

LD

(COLLIZ) ,A

;ную, фиксирующую факт

;коллизии.

СС64

С9

RET

;Возврат

СС65

00

FLAG

DEFB

00

СС66

00

COLLIZ

DEFB

00

СС67

00

DIREC

DEFB

00

СС68

00

DISTN

DEFB

00

СС69

00

SWTCH

DEFB

00




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Железо - Доработки: Пеpеключатель turbo/normal для Scorpion ZS-256-Turbo
Coding - 16-битная процедура быстрого возведения в степень.
Имхо 2 - о дальнейшей судьбе гейта GRODNO C_NET <> MINSK ZX-NET.
Почта - новый xитпaрaд игр.
Новости - В эмуляторе Z80Stealth прерывания приходят 55 раз в секунду!

В этот день...   23 ноября