задается в таблице, а нужно еще и маркировку именно на тайле.
у тебя сейчас 2 старших бита заняты под манипуляции с краевыми тайлами
есть тема именно сделать 1 вывод за цикл непосредственно на экран
это сильно ускорит обработку графики
вот смотри
сейчас ты чистишь 6912 байт, потом рисуешь, потом бросаешь 6912 байт
я предлагаю заполнять 3840 байт
потом отрисовать в буфере краевые тайлы
потом прорисовать сразу на экране все что нужно (скорее всего от 1/2 до 1/4 экрана)
будет сильный выигрыш по скорости
---------- Post added at 19:08 ---------- Previous post was at 18:13 ----------
алгоритм по шагам
утрировано
вначале чистим буфер
ld hl,ret_draw
ld de,empty_char
ld bc,0
ld sp,end_buff
ld (curr_buf),sp
push hl
dup 768
push de,bc
edup
далее
отрисовка спрайта
если просто рисуем, то
в обработчики заносим draw_char
в адрес - адрес тайла
в атрибуты добавляем краевой/некраевой левый/правый (как
есть сейчас) и добавляем 2 бита манипуляции (флип по горизонтали, флип по вертикли)
в случае если уже есть что-то есть и оно некраевое то просто игнорим
в случае если уже есть что-то есть и оно краевое то:
1 копируем новый тайл в соответствии с условиями (flip_h/flip_v) в (curr_buff)
2 накладываем то что есть в соответствии с условиями (flip_h/flip_v mask_l/mask_r)
3 заносим новый обработчик draw_char, новый адрес (curr_buff), зануляем флаги (flip_h/flip_v)
4 приращиваем (curr_buf) на 8 для следующего условного тайла
врядли возможна ситуация когда у тебя в одном месте рисуется с наложением больше 2х тайлов
---------- Post added at 19:11 ---------- Previous post was at 19:08 ----------
могу написать кусочек кода![]()
на входе нужен адрес тайла в спрайте, его флаги и координаты на экране
*тайл - кусочек 8*8 точек спрайта
собственно ты ими и манипулируешь
С уважением,
Jerri / Red Triangle.
Кстати, на счёт биперной музыки при загрузке картинок. Зацените как может звучать простой бипер: http://chipmusic.org/mister+beep/mus...-mermaid-1-bit
это оно так на пц звучитна спеке всетаки похуже
![]()
С уважением,
Jerri / Red Triangle.
Сомневаюсь, что быстрее оно будет работать. У тебя идет заполнение промежуточного буфера почти 4к, в то время как у меня на вирт.экран сразу строится картинка. После прорисовки тайла мне не нужно больше помнить, откуда я его взял, флаги к нему и процедуру его вывода, а у тебя нужно. К тому же при выводе из буфера будет противное мерцание на экране, т.к. вывод по процедурам на реальный экран будет в реальном времени. А у меня весь вывод происходит на виртуальный экран, и когда он полностью построен, просто его копируем на реальный. Пока идет это строительство, игрок видит на экране полную предыдущую картинку, без мерцания и перерисовывания. Вирт.экран для этого и сделан, а не потому что я захотел потранжирить память.
И еще непонятно, зачем заводить дополнительные два флага, если сразу можно указать адрес нужной процедуры вывода.
Кстати, у меня в программе есть некое подобие этого буфера (ELEMxx), только я его заранее построил вручную, и он не меняется. В каждой его ячейке в зависимости от элемента клетки указан адрес спрайта, процедура его вывода и горизонтальная координата. Еще учти, что некоторые одни и те же спрайты выводятся различными процедурами и/или в разные координаты. Для этого я и писал зеркалку и перевертывание, чтобы в 4 раза сэкономить место под спрайты. Буфер невозможно просчитать программно, можно задать только вручную, т.к. для каждого спрайта индивидуальные параметры вывода.
не сомневайся
давай попробуем
ты обнуляешь 6912 байт
я только 3900
ты перебрасываешь потом на экран 6912 байт
я только то что не черное
надо смотреть
потому как есть возможность именно сильно всё ускорить
могу модифицировать 68 версию
Последний раз редактировалось jerri; 05.04.2011 в 11:52.
С уважением,
Jerri / Red Triangle.
Я тупо перебрасываю-копирую, а ты будешь выводить каждое знакоместо через процедуры.
И формируешь этот буфер через многочисленные флаги.
В общем, сомневаюсь я.
Но попробуй на 68-й версии, если хочешь. Если получится ускорить, вставлю тогда.
---------- Post added at 12:09 ---------- Previous post was at 12:07 ----------
Я сейчас занят вставкой спрайтов трупов и врагов.
похожий двиг:
shining in the darkness [sega genesis]
![]()
РПГ же![]()
С уважением,
Jerri / Red Triangle.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)