Логотип.
 Разделы сайта Cтатьи.
Сайт в разработке!

Статистика сайта.

Посещений за день: 250
Посещений за месяц: 2225
Посещений за год: 43164


Баннеры.

DMconnect
Maksy's PWS


Статистика в картинках.

likes counter


Погода.


  • Главная.
  • Новости.
  • Файлы.
  • Работы.
  • Контакты.
  • Чат "Пиво".
  • Статьи.
  • Ссылки.
  • Гостевая.
  • Реализация эффекта Moving Shit.

     Не знаю, как сделали 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 ; т.е. C=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 -> убрать 

     Может, я поставил непонятные комментарии, тогда я объясню очень просто всю ее работу.

     Эта процедура является обычной, я бы сказал, простейшей, выводилкой спрайта. Только в ней добавлен один нюанс: строки выводятся только тогда, когда регистр A переполнен и, соответственно, флаг C=1, то есть установлен. Выходит, что строки не выводятся в определенной последовательности. Или, наоборот, дублируются по той же закономерности. Закономерность эта задается в самом начале, в регистре A. Дальше, на протяжении всей программы, он складывается сам с собой.

     Получается интересная и нужная штука. Это чем-то напоминает работу с дробными числами. А этот прикол можно очень лихо применять.

     На этом принципе реализован целочисленный алгоритм Брезенхейма для быстрого рисования линии от точки до точки, рисование окружности.

     Не думаю, что эта процедура пригодна для использования в ваших прогах - можно написать процедуру быстрее и универсальней. Важен сам принцип, как она работает. А дальше можно его использовать при решении других задач, нужна только фантазия.

     Профессиональный секрет:
     Чтобы лучше фантазировалось, советую иметь при себе пару бутылочек пива -PRESIDENT- CHERNIGOV 17%.

    >>

    BitByByte, 2000 г. (2026).