+ посты в ТГ
- - - Добавлено - - -
Немного об ограничениях и возможностях.
Отрисовка картинки (2х пиксельного скрола) устроена следующим образом,
заранее подготовлены 4 сдвига по 2 пикселя двух смежных тайлов, так называемые тайлопары.
Что позволяет почти за фрейм ~80к тактов вывести фон из таких тайлопар в окне размером 10.5х11 тайлов (168х160 пикселей).
Количество таких тайлопар ограничено доступной памяти в 7 страницы ОЗУ, на хранение адреса и смещённых спрайтов и равно оно 79 тайлопарами.
Данный способ вывода графики является наиболее приемлемый, т.к. обладает высокой производительностью, но остальные объекты имеющие
маску, коллизию и разные флаги для взаимодействия рисуются повторно вторым слоем с предварительной сортировкой по вертикали,
так называемые динамические объекты, обладают свойствами:
- декали (имеют приоритет сортировки),
- проджектайлы (высоту полёта и вектор скорости),
- частицы (вектор скорости и время жизни),
- коллизия видимую и физическую
- т.п. флаги.
размер буфера в 1кб позволяет хранить 42 объекта.
Для того что бы объекты поместились в буфере по мере перемещения окна по миру, объекты добавляются/удаляются постоянно.
Движущиеся частицы, проджектайлы и т.д. это объект или группа объектов, у которых время жизни очень короткая,
но есть и объекты с продолжительным временем жизни, если персонаж находится +- на одном экране, это стенки, заборы и т.д.
Мне хочется сделать поселение, не просто текстовым квестом, а дать возможность пошлындать по нему, что накладывает ряд сложностей на реализацию текущего рендера.
Нельзя размещать большие объекты на экране, если делать такие объекты составные (состоящие из множества маленьких),
заставит сделать окно добавления в буфер динамических объектов больше видимого, что в свою очередь повлечёт её засоряемость.
По этому подумав, что было бы неплохо часть тайлов которые попадали бы в динамические объекты вынести в тайлопары,
для этого потребуется увеличить количество тайлопар до максимума 128шт, а размещать новые 49 шт в любой странице,
перед выводом их копировать в общий буфер, как это делается с динамическими объектами и выводить. Падение производительности прямо пропорционально,
количеству таких тайлопар на экране, 40 шт таких тайлопар съест ~25к тактов, при условии что видимое окно вмещает 121 тайл.
Так же на картинке видно, в жёлтый прямоугольник это тайлопары, красные, это динамические объекты имеющие коллизию, чем не обладают тайлопары.
Голубые кубики, это динамические объекты не обладающие коллизией, но рендер их осуществляется с альфа маской.
Самый верхний прямоугольник, не относится к тайлопаре, хотя находится на его поверхности, подобную проблему скорей всего решится путём, добавления пустых объектов (только коллизия)