Вложений: 2
Мины пошли... (ревизия 51)
Наконец-то хоть что-то сделал с объектами, спрайтами.
Этот объект пока на знаколинии разложишь - мозг сломаешь!:v2_crazy: Ведь всё усугубляется еще и клиппингом.
В итоге - куча процедур печати, куча таблиц для заполнения буфера...
Вложение 15928
1) Долго долго думал, на каком же способе печати спрайтов остановитсья. В итоге сделал вывод спрайтов маской. Т.е. объекты не затираются перед выводом ландшафта, а затираются краешком маски прямо при выводе.
Правда не совсем понятно как будут затираться пули от пушек - ведь у них шаг где-то 4 или 8 пикселей.
Тросы пока сделал печаткой спрайта 8на8 пикселей поэтому они так много и жрут времени.
2) Можно, конечно, затирать и выводить спрайты ксоркой, но это раза в 1.5 будет времени думаю. Т.к. придется делать 2 буфера спрайтов. Один для вывода на текущем кадре, другой - для затирания на предыдущем. Зато будет проще. Не надо будет заботиться о стирании объектов - прогнав буфер 2-й раз он вернет фон к первоначальному состоянию.
В общем, что-то я не доволен. Как же лучше сделать?
Вложений: 2
Случайности неслучайны...
Прикольно когда, что-то движеться:)
Вложение 16005
Пока без взрывов.
Вложений: 2
Пробуем цвет (ревизия 60)
Нда, клэшинг неизбежен.:v2_conf3:
Сделал раскраску ландшафта. Цвета сдвигаются одновременно с ландшафтом.
Вложение 16057
Ну, допустим, мины я подвину подальше от краёв ландшафта, Но пушки-то всё равно будут переливаться!:v2_blink:
Можно попробовать выводить цвета вместе со спрайтами, сохраняя атрибут фона под спрайтом, а потом восстанавливая его. Но от клэшинга это не спасет (будет тогда край ландшафта переливаться), а накладные расходы увеличатся существенно. Нужно ли?
Похвастаюсь процедурой вывода экрана :v2_finge:.
Код:
;печать видимой части ландшафта
;IN: LeftLandPtrs
PrnScreen ;{
di
ld (RestoreSPAndReturn+1),sp
ld sp,LeftLandPtrs ;sp - Указатель на указатели начал видимой части строк
jr _1PrnScreen
EndParseTileBuffer
ld sp,ix ;10 ;сохраненный sp
pop hl ;10
ld sp,hl ;6=26 ;загружаем адрес буфера спрайтов
ret ;разбор буфера спрайтов для этой строки
EndParseSpriteBuffer
pop hl ;10 ;в конце каждого буфера спрайтов хранится сохраненный sp
ld sp,hl ;6
_1PrnScreen
pop ix ;14 ;сохраненный sp. Запомним его в ix
pop hl ;10
ld sp,hl ;6=46 ;загружаем адрес буфера тайлов
ret ;разбираем буфер тайлов
;}
Так со стекпоинтом я еще никогда не развращался , спасибо Jerri, что научил.