Уважаемые! подскажите сколько кушают такие процедуры?
понятно как напишешь так и будет,но кто писал отклинетесь плз. помнться в арт студио это очень медленно делалось.Стоит ли заморачиваться если спрайт 5х5 зн.мест:v2_conf3:
Вид для печати
Уважаемые! подскажите сколько кушают такие процедуры?
понятно как напишешь так и будет,но кто писал отклинетесь плз. помнться в арт студио это очень медленно делалось.Стоит ли заморачиваться если спрайт 5х5 зн.мест:v2_conf3:
Зеркальное очень медленно. Автомаску не делал, хотя, кажется, видел что-то где-то - но это факт непроверенный и потому бесполезный! Большинство быстрых процедур рассчитано на 2x2-спрайты. Блоки по 5 в квадрате уже подразумевают цикл, а это, в свою очередь, скорость стратегий (желательно - походовых), в аркадах с кучей подвижного на экране трудновыполнимо. Или развернуть эти циклы на килобайты кода, что симметрично снижает разнообразие в продукте за счет скушанной памяти.
256-байтными табличками делать (т.е. для любого байта уже расчитано новое значение)
таблички - как для зеркалки, так и для маски.
што то туплю поясни плиз:v2_conf2:
Код:;hl = from_addr ; de = to_addr ; b = table_mirror/256
ld c,(hl)
ld a,(bc)
ld (de),a
inc l
dec e
...
Я делал так:
1. Зеркалка: Табличка для всех 256 значений.
Например такая прога сформирует таблицу с адреса TABMIR:
LD HL,TABMIR; кратный 256 адрес
MT1 LD A,L
DUP 8
RLA
RR (HL)
ENDD
INC L
JR NZ,MT1
RET
А пользоватся так:
LD L,байт который надо отразить
LD H,TABMIR[
LD A,(HL); результат в A
2. Автомаска:
Тут тот-же принцип. Строил две таблички по 256 байт (для левой и для правой сторон).
если познакоместно - то лучше просто повторить код 8 раз подряд (без djnz)
если по линиям спрайта - то принцип см. в теме http://zx.pk.ru/showthread.php?t=8625
В саботерах емнип применили сабж
Автомаска была в CSC:DejaVu
http://zxdocs.fatal.ru/coding/automask.zip
спасиб добрый чилавек:)
Таблица 512 байт под автомаски слева и справа - бывает расточительно.
Поэтому написал такие процедуры получения автомасок:
Код:; получение автомаски справа для байта изображения
; входные параметры: A = байт изображения
; выходные параметры: C = байт изображения, B = автомаска
RMASK LD C,A
LD B,255
RRCA
RET C
SLA B
RRCA
RET C
SLA B
RRCA
RET C
SLA B
RRCA
RET C
SLA B
RRCA
RET C
SLA B
RRCA
RET C
SLA B
RRCA
RET C
SLA B
RRCA
RET C
SLA B
RET
; получение автомаски слева для байта изображения
; входные параметры: A = байт изображения
; выходные параметры: C = байт изображения, B = автомаска
LMASK LD C,A
LD B,255
RLCA
RET C
SRL B
RLCA
RET C
SRL B
RLCA
RET C
SRL B
RLCA
RET C
SRL B
RLCA
RET C
SRL B
RLCA
RET C
SRL B
RLCA
RET C
SRL B
RLCA
RET C
SRL B
RET
Andrew771 это не очень хороший вариант
для очень частных случаев
если у тебя спрайт шириной 1 знакоместо твой вариант не годится
Это уже не спрайт, а строка символов. :)
Да, эти процедуры только для масок слева или справа. А если нужно сверху или снизу, то нужно просматривать все 8 байтов знакоместа (или хотя бы 4, смотря какие "рваные" края). А таблица масок (если делать через таблицу) вырастет до 1 кб. :)
Andrew771, сколько спрайтов с автомаской 3*3 ты выведешь во фрейм этой процедурой
Во фрейм мало, не знаю сколько. А вот здесь моя заготовка будущей игры: http://zx.pk.ru/showpost.php?p=369513&postcount=177
Три четверти экрана выводится из четвертинок спрайтов, отзеркаливаемых и автомаскируемых друг с другом. Вроде приемлемая скорость.
ага видел, неплохо для пошаговой РПГ
посчитай сколько тактов у тебя тратится на разворот 1 байта в худшем случае
и потом рассмотри вариант
ld c,a
ld a,(bc)
кстати по скорости посмотри
barbarian
с адреса #8fb5 вывод строки спрайта
с адреса #9048 конкретно преобразование
но у них формат спрайтов чуть другой - поудобнее для такого вывода и маска получается правильная
а таблиц кстати надо 3
для вырезания маски слева
для вырезания маски справа
и для вырезания маски с обеих сторон - 768 байт
Про barbarian - да, там быстро, но всего два человечка прыгают. А у меня весь экран перерисовывается при каждом ходе.
Я всё-таки сделал маски и зеркала через таблицы. Пришлось пожертвовать 768 байт (левая маска, правая маска, зеркало. Вырезание с обеих сторон мне не нужно). Ощутимо быстрее стало.
2 человечка это видимость :) там много чего копируется
показывай код :)
Выложил тут: http://zx.pk.ru/showpost.php?p=369689&postcount=184
Отвечай по возможности там же, чтобы здесь не флеймить не по теме. :)