|
Codemania
#01
31 декабря 1999 |
|
Программирование - Hе самая медленная пpоцедуpа вывода спpайтов 2*2 с точностью до пиксела.

Специально для Хирурга и
Бластера.
--------------------------------
================================
********************************
================================
--------------------------------
Не самая медленная процедура
вывода спрайтов 2*2 с точностью
до пиксела.
Немного теории. Как наверное
уже всем ясно, что если спрайт
раскладывать на точки и выводить
по точкам, то тормозить будет
страшно, по этому применяют
всякие хитрости.
Есть спрайт 2*2 знакоместа. По
вертикали его сдвинуть просто, а
вот по горизонтали...Значит так,
заготавливаем заранее 8 спрайтов
2*3 знакоместа, заранее сдвину-
тых по горизонтали, а потом вы-
водим нужный. Но это годится
только тогда, когда спрайтов не
очень много. А если их 50 ?
2*3*8 - размер одного спр.2*Ззн.
Их 8 - 2*3*8*8. А всего - 50 ...
2*3*8*8*50=6*64*50=64*300=19200.
Однако для крупной проги 50 это
мало, и не одними же спрайтами
жив человек - музон, сама прога.
Вывод один - сдвигать спрайты во
время вывода. В конце рубрики
можно найти и саму прогу вывода,
которая выводит спрайт по OR.
Сама прога не сильно сложна,
главное понять идею. В проге три
основных процедурки:
PTBL_S - сдвиг 2 байт из (hl) и
(hl+1) и рез.в B',C',D'.
PTBL_O - вывод 3 байт на экран
с учетом того, что экран не
бесконечен.
PTBL_D - т.к. в DE адр.в экр.,
то эта процедурка сдвигает DE на
один пиксель вниз.
HL-ADRESS SPRITE
B-COORD_Y (0..191)
C-COORD_X (0..255)
PTBL CALL PTBL_A
LD B,8*2
PTBLO CALL PTBL_S
CALL PTBL_O
CALL PTBL_D
LD A,D
CP #58
RET NC ;OUT OF SCR
DJNZ PTBLO
RET
PTBL_D INC D ; DOWN_DE
LD A,D
AND 7
RET NZ
LD A,E
ADD A,#20
LD E,A
RET C
LD A,D
SUB 8
LD D,A
RET
PTBL_O PUSH DE
EXX
LD A,B
EXX
LD (DE),A
INC E
LD A,E
AND 31
JR Z,PTBL_O0 ;OUT OF SCR
EXX
LD A,C
EXX
LD (DE),A
INC E
LD A,E
AND 31
JR Z,PTBL_O0 ; -//-
EXX
LD A,D
EXX
LD (DE),A
PTBL_O0 POP DE
RET
PTBL_S LD A,(HL)
INC HL
EXX
LD B,A
EXX
LD A,(HL)
INC HL
EXX
LD C,A
EXX
LD A,C
EXX
LD D,0
PTBL_S0 AND A
JR Z,PTBL_S1
RR B
RR C
RR D
DEC A
JR PTBL_S0
PTBL_S1 EXX
RET
PTLB_A LD A,B
RRCA
RRCA
RRCA
AND #18
OR #40
LD D,A
LD A,B
AND 7
ADD A,D
LD D,A
LD A,B
RLCA
RLCA
AND #E0
LD E,A
LD A,C
RRCA
RRCA
RRCA
AND #1F
ADD A,E
LD E,A
LD A,C
AND 7
LD C,A
RET
--------------------------------
================================
********************************
================================
--------------------------------
The end. Mad Z-Group (C)2000.
Main editor : Slavik/ZGR.
Music made by uncnown.
Другие статьи номера:
Вступление - Итак, пpивет! |
Программирование - Hе самая медленная пpоцедуpа вывода спpайтов 2*2 с точностью до пиксела. |
Похожие статьи:
В этот день... 13 ноября