Важная информация

User Tag List

Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 12 из 12

Тема: Legends & Myths (dev log)

  1. #11

    Регистрация
    18.01.2021
    Адрес
    г. Санкт-Петербург
    Сообщений
    365
    Спасибо Благодарностей отдано 
    56
    Спасибо Благодарностей получено 
    458
    Поблагодарили
    135 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Добавил поддержку анимации гексагонов, и в качестве первого примера реализовал анимированный туман.
    Для быстрого proof of concept прикрутил небольшой код, позволяющий визуализировать анимацию тумана — вот что получилось.

    Вжух


    P.S. Вывод временно осуществляется в одном экране, без буферизации, поэтому видны мерцания (в эмуляторе NoFlick попытался это сгладить)
    Последний раз редактировалось Deadly; 08.01.2026 в 13:20.

    Эти 5 пользователя(ей) поблагодарили Deadly за это полезное сообщение:

    Andrew771(08.01.2026), Beaver(08.01.2026), Dart Alver(08.01.2026), Lethargeek(08.01.2026), Vatr(10.01.2026)

  2. #12

    Регистрация
    18.01.2021
    Адрес
    г. Санкт-Петербург
    Сообщений
    365
    Спасибо Благодарностей отдано 
    56
    Спасибо Благодарностей получено 
    458
    Поблагодарили
    135 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию



    Display List для гекс-рендера

    Хочу описать одну архитектурную идею, к которой я пришёл при оптимизации рендера гексагональной карты.

    Текущая реализация:
    В рендере карты есть несколько проходов:
    - отрисовка гексов;
    - туман войны;
    - эффекты;
    - обновление экрана.

    При этом все они проходят по одним и тем же гексам и тем же маршрутами, но каждый раз:

    - заново считают экранные координаты;
    - заново обходят карту;
    - держат много временных значений в регистрах.

    Это работает, но не быстро и не очень эффективно.

    Идея
    Разделить процесс на два этапа:

    Генерация списка — выполняется редко (например, при скролле или других событиях).
    Исполнение списка — выполняется каждый кадр.

    Вместо того чтобы каждый проход сам обходил карту, я один раз формирую линейный список того, что нужно отрисовать.
    По сути — простой software display list.

    Как выглядит список
    Список — это массив (или стек) записей, по одной на каждый видимый гекс.

    В каждой записи хранится:
    - индекс обрабатываемого гексагона в рендер-буфере (0–39);
    - номер строки начала рисования (0–191);
    - количество рисуемых колонок гексагона (0–5).

    Такой список даёт несколько преимуществ:
    - порядок элементов уже правильный (сверху вниз);
    - в будущем можно добавить сортировку по оси Y для спрайтов;
    - длина списка фиксирована;
    - внутри прохода нет ветвлений (не обновляемые гексагоны просто не попадают в список).

    Генерация списка

    Этот этап выполняется:
    - при изменении положения видимой области карты;
    - при анимации гексагона;
    - при игровых событиях, влияющих на состояние гексагона.

    То есть список пересобирается только тогда, когда это действительно нужно.

    Использование списка

    Каждый проход рендера просто:
    - берёт готовый список;
    - линейно по нему проходит;
    - делает своё грязное дело.

    Например:
    один проход рисует гексы;
    другой — эффекты;
    третий — туман войны.

    Никаких повторных расчётов — только чтение уже подготовленных данных.

    Задел на будущее

    Пока список содержит только гексы, но формат легко расширяется:
    - можно добавить тип записи (гекс, спрайт, эффект);
    - смешивать разные элементы в одном списке;
    - рисовать всё одним проходом сверху вниз.

    Даже если до этого не дойдёт, текущая реализация уже даёт ощутимый выигрыш.

    Итог:
    Исключается многократный обхода карты в пользу одного подготовленного списка.
    Это упростило код, сделало его более читабельным, снизило нагрузку и сделало рендер более контролируемым.
    По сути — простой display list без лишней магии, который хорошо ложится на ограниченное железо.



    Прошло время.... )



    Здесь постарался исправить почти все проблемы с обновлением гексов. Самое главное — когда экран не скроллится, даже с анимациями FPS не проседает. Далее нужно корректно обновлять гексагоны выше и ниже (если это необходимо) текущего анимированного гексагона. Это хорошо видно на горах (высоких тайлах): гора не обновилась после того, как выше изменился гексагон. Но это уже другая задача — расширение текущего рендера.

    Как и в предыдущих версиях, буферизации нет — при скроллинге хорошо заметно, что окно отрисовывается за несколько фреймов.

    P.S. Да, это может показаться регрессом, но всё же работает на 3,5 МГц.
    Тут можно скачать билд, описание во вложении...
    Последний раз редактировалось Deadly; 15.01.2026 в 16:04.

    Эти 2 пользователя(ей) поблагодарили Deadly за это полезное сообщение:

    Black Cat / Era CG(15.01.2026), jerri(15.01.2026)

Страница 2 из 2 ПерваяПервая 12

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 7 (пользователей: 2 , гостей: 5)

  1. Deadly,
  2. Destr

Похожие темы

  1. Death Drive Destruction (dev log)
    от Deadly в разделе Игры
    Ответов: 137
    Последнее: 25.12.2025, 20:16
  2. Log Cabin Dizzy (ZX Spectrum Edition)
    от Verm-V в разделе Игры
    Ответов: 15
    Последнее: 07.02.2021, 16:50
  3. Ответов: 42
    Последнее: 23.01.2021, 23:21
  4. Legends of Bytes #6
    от cherkasy в разделе Пресса
    Ответов: 39
    Последнее: 27.11.2019, 02:40
  5. Legends of Bytes #3
    от cherkasy в разделе Пресса
    Ответов: 11
    Последнее: 24.02.2012, 18:46

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •