|
Amiga News
#01
31 августа 1997 |
|
Coder FX - реализация эффекта Moving Shit.

Я рад, что вы решили заглянуть в
этот раздел. Я конечно не 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
Другие статьи номера:
Похожие статьи:
В этот день... 24 ноября