Amiga News #01
31 августа 1997 |
|
Я рад, что вы решили заглянуть в этот раздел. Я конечно не RST 7 или IMP, но думаю эта статья будет полезна... В этом номере расскажу о таком про- стом эффекте, как сжатие спрайта или его растягивании (например, как это вы могли наблюдать в INTRO нашего журнала). Похожий эффект вы могли наблюдать в intro ZX-FORMAT'а. Не знаю, как сделали XL-DESIGN, в их профессионализме никто не сомне- вается, а как хаккер я никуда не год- ный,( ну облом мене лезть разбирать чей-то код) я решил подумать над этим сам. И знаете, не так уж это сложно ! Взял, да написал нечто, для пробы. ------------------------------------- ld hl,30000 ; адрес спрайта ld de,#4000 ; адрес в экране ld b,80 ; высота спрайта xor a ; так надо !! vio add a,64 ; коэф.уменьш./увел. ; выс=(нач.выс)*коэф ; коэф=n/256 ; n=64 * jp c,cont; на вывод тек.лин. push de ld de,16 ; ширина спрайта * add hl,de; пропустить линию ; спрайта, ; так как уменьш. pop de ; т.е. ф.С=0 * djnz vio ; т.е С=0,А=nn ; 0,nn * ret cont push de: ld c,h ldi:ldi:ldi:ldi ; переброс ldi:ldi:ldi:ldi ; линии ldi:ldi:ldi:ldi ; спрайта ldi:ldi:ldi:ldi ; из буфера pop de ex af,af' ; сохр. счетчик call scline ; след.лин.в экр. ex af,af' ; восст. счетчика djnz vio ; продолж. вывод ret ; УРА!! вываливаемся scline inc d: ld a,d: and 7 ret nz ld a,e: add a,32: ld e,a ret c ld a,d: sub 8: ld d,a ret ------------------------------------- Эта процедура выведет ваш спрайт уменьшенный в соответствии с подо- браным кооэфициентом. Конечно, можно заставить работать ее на увеличение, надо только заме- нить строки помеченные (*), соответственно: jp c,cont->jp nc,cont add hl,de->sbc hl,de djnz vio ->убрать ret ->убрать ------------------------------------- Может, я поставил непонятные ком- ментарии, тогда я обьясню очень просто всю ее работу: эта процедура является обычной, я бы сказал простейшей, выводилкой спрайта. Только в ней добавлен один нюанс: строки выводятся только тогда, когда регистр А переполнен и соответ- ственно флаг С=1, т.е. установлен. Выходит что строки НЕ ВЫВОДЯТСЯ в определенной последовательности. Или наоборот дублируются по той же закономерности. Закономерность эта задается в самом начале, в регистре А Дальше, на протяжении всей программы, он складывается сам с собой. Получается интересная и нужная штука. Это чем-то напоминает работу с дробными числами. А этот прикол можно очень лихо применять. На этом принципе реализован цело- численный алгоритм Брезенхейма для быстрого рисования линии от точки до точки, рисование окружности. Не думаю, что эта процедура при- годна для использования в ваших про- гах, можно написать процедуру быстрее и универсальней. Важен сам принцип, как она работает. А дальше можно его использовать при решении других задач, нужна только фантазия. Профессиональный секрет: Чтобы лучше фантазировалось, советую иметь при себе пару бутылочек пива -PRESIDENT- CHERNIGOV 17% . ------------------------------------- Для первой статьи, думаю, достаточно. ------------------------------------- В следующем номере я или BER расска- жем чего-нибудь поинтересней и по- современней. Чо-нибудь расскажет BER о загрузке с бешеной скоростью или с музыкой, я рассажу о крутом приме- нении SINUS'а, что-нибудь об алгорит- мах Брезенхейма, всяких выкрутасах с графикой и т.д. Я думаю, что эта рубрика будет полезна всем: и ламерам, и начинающим кодерам. _____________________________________ VIOLATOR
Other articles:
|
|
|
|
|
|
|
|
|
Similar articles:
В этот день... 21 November