сделай с автомаской горизонтальной - будет норм
Вид для печати
CityAceE, извини за любопытство - ты смотрел (или хотя бы слушал фоном) какие-нибудь стримы Alone Codera?
- - - Добавлено - - -
Слишком сузил, попробую расширить - какие-нибудь исходники современных игрописателей для спека или других ретроплатформ изучаешь?
Не смотрел, не слушал, не изучал. Увы... Мне вообще чужой код даётся с огромным трудом. Я даже свой перестаю понимать, если прошло какое-то небольшое время. Поэтому для себя стараюсь комментировать чуть ли не каждую строчку. Те видео уроки, которые я выкладывал - это по сути я просто пересказал своими словами то, что мне объяснил Sanchez и применил к Специалисту.
про `автомаску`
https://zxpress.ru/article.php?id=8041
Хм... 1 берешь байт например %00111100 делаешь ROL влево, ROL вправо и OR ишь это все в один байт. потом инвертишь результат
получается байт %10000001.
2 делаешь этим способом все 256 байт от 0 до 255 и все кладешь в одну таблицу. Это таблица автомаски
3 при выводе изображения каждый байт спрайта маскируешь байтом из таблицы автомаски. это дает частичное маскирование фона. В динамике смотрится нормально. смотри игру Trantor например
методы предложенные в zx press - остаются затратными всегда
- - - Добавлено - - -
- - - Добавлено - - -Код:
;генератор таблицы маски
ld hl,mask_tbl
l0
ld a,l
add a,a
ld c,a
ld a,l
or a
rra
or c
or l
cpl
ld (hl),a
inc l
jp nz,l0
Код:;вывод спрайта
;наибыстрый вариант наверное через стек
; hl маска
; de место на экране или буфер спрайта
; sp адрес спрайта
...
pop bc
ld l,c
ld a,(de)
and (hl)
or l
ld (de),a
inc e ;переход ниже
ld l,b
ld a,(de)
and (hl)
or l
ld (de),a
inc e ;переход ниже
...
Опробовал данный способ. В принципе, учитывая, что в моём случае пересечения с фоном минимальны, то, наверное, этот метод будет приемлемым.
https://pic.maxiol.com/images2/17259....tonyback2.gifhttps://pic.maxiol.com/images2/17259....tonyback1.gif
Т.к. есть "настоящая" маска, то лучше попробовать использовать ее. Если каждому возможному байту спрайтов соответствует только один байт маски, то все отлично. Если нет (скорее всего нет), то можно сделать несколько таблиц масок, для разных групп спрайтов. Места займет больше чем автосгенерированная маска (но меньше, чем полный набор масок), но качество маскировки заметно лучше.
Честно говоря, да, прямо очень не хочется идти на какие-то компромиссы. А хочется сделать всё максимально красиво, насколько это возможно. Я ведь даже пока не знаю, а вдруг у меня вообще на всё быстродействия хватит. Там не так уж и много анимации на экранах.
Интересная мысль! Спасибо! Надо будет реально провести анализ, а вдруг!
Всего 4 спрайта движения 32*32 пикселя. Итого 512 байт. Но какой зоопарк среди масок!
Скрытый текст
# Спрайт Маска 1 0 0 2 0 255 3 0 128 4 1 1 5 1 255 6 1 127 7 2 2 8 3 255 9 3 3 10 4 255 11 4 4 12 5 7 13 7 255 14 7 7 15 8 15 16 9 15 17 10 11 18 12 12 19 12 255 20 12 252 21 14 255 22 14 14 23 15 15 24 16 17 25 19 19 26 24 248 27 29 31 28 30 30 29 31 31 30 31 255 31 32 224 32 40 63 33 48 48 34 53 63 35 56 248 36 57 57 37 58 255 38 59 59 39 60 252 40 62 63 41 63 63 42 64 192 43 67 255 44 68 127 45 68 255 46 79 255 47 80 240 48 87 127 49 94 255 50 96 224 51 96 96 52 99 127 53 99 255 54 109 127 55 112 240 56 112 112 57 115 127 58 116 255 59 121 255 60 122 255 61 122 127 62 123 127 63 124 255 64 127 255 65 128 255 66 128 128 67 129 255 68 129 129 69 130 254 70 131 255 71 143 255 72 152 255 73 160 224 74 167 255 75 167 231 76 168 248 77 175 255 78 189 255 79 192 192 80 195 195 81 208 240 82 220 252 83 221 255 84 222 255 85 224 255 86 224 224 87 226 227 88 229 255 89 234 255 90 235 255 91 239 255 92 240 240 93 240 255 94 240 243 95 241 255 96 245 255 97 247 255 98 248 255 99 248 248 100 252 255 101 252 252 102 254 255 103 255 255
[свернуть]