Codemania #01
31 декабря 1999 |
|
Специально для Хирурга и Бластера. -------------------------------- ================================ ******************************** ================================ -------------------------------- Не самая медленная процедура вывода спрайтов 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.
Other articles:
|
|
Similar articles:
В этот день... 21 November