да, такое делалось в некоторых демках и игрушках.Сообщение от axor
но имхо не лучший выход.
тем более что не всегда применимо- допустим если игра не во весь экран, а в "рамочке". там уж атрибуты особо не расставишь
двойная маска. т.е. к маске которую имеет сам спрайт, добавлять еще одну маску. Если спрайт ширины 2 или 3 байта - вполне эту маску можно перед выводом спрайта грузануть в регистры со штрихом, и там и держать, для небольшого ускорения. Если не нравится замедление - сделать 2 варианта процедуры вывода, вариант с дополнительной маской работает только для спрайтов, которые "выехали" за край. Идея ясна?
Но зато самый простой способСообщение от Sinus
![]()
axor/Perspective
http://abzac.retropc.ru/
спрайт фиксированной ширины? если да, то можно написать набор подпроцедур типа:
;если влазит целиком
put_all:
dup N
ldi
edup
inc d
dec e
dup N
ldd
edup
inc d,e
ret
;если не влазит K знакомест справа
put_noK:
dup N-K
ldi
edup
inc d
dec e
dup K+K
inc hl
edup
dup N-K
ldd
edup
inc d,e
dup K+K
inc hl
edup
ret
естесно соптимизировать коррекцию адреса в HL
вывод будет состоять в вызове нужной процедуры.
плюс отсечение невидимых спрайтов. Итого имеем 1 процедуру полного вывода, N процедур для вывода за правым краем и N процедур для вывода за левым краем.
зы: код можно переделать и под маску
acidrain ну во-первых это не я такое решение предложил (кста можно и не в ПЗУ, а в любое свободное место ОЗУ), а во-вторых, если там страничка озу, то надо каким-нибудь битом в каком-нибудь порте запрещать туда запись.
или отключалку делать
![]()
выход отличный, сам на данный момент держу в голове как вариант. пофиг до рамочки, главное - геймплэйСообщение от Sinus
![]()
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
блин, и правда, торможу после работы![]()
А если кинуть безо всяких проверок, а запорченный экран быстро-быстро забить фоном?
Сферический ламер в вакууме
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)