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

User Tag List

Страница 15 из 23 ПерваяПервая ... 111213141516171819 ... ПоследняяПоследняя
Показано с 141 по 150 из 228

Тема: Портирование игр с PC на БК

  1. #141

    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    1,724
    Спасибо Благодарностей отдано 
    167
    Спасибо Благодарностей получено 
    406
    Поблагодарили
    257 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Думаю над хитрой буферизацией экрана под движущимися объектами. Хочу уложить всё в объём памяти стандартной БК-0010.
    Пока идея такая:

    1. Определять начальные адреса экрана для левого верхнего угла каждого спрайта.
    2. Для каждой строки экрана считать сколько спрайтов на неё приходится. Это буфер из полторы сотни байтов.
    3. Сортировать спрайты в порядке отрисовки сверху вниз и слева направо.
    4. Формировать массив вида «содержимое, адрес». Для 10 спрайтов шириной в 3 слова и высотой в 10 пикселей получается массив 300*2 слов. В 16 раз меньше, чем полный буфер экрана.
    5. Поскольку спрайты отсортированы, при отрисовке легко проверять массив на несколько элементов назад: а не записывалось ли уже по этому адресу содержимое других спрайтов. Если не записывалось - делаем просто MOV. Если записывалось - смешиваем содержимое (с применением масок если хватит памяти на них или без, просто XOR’ом).
    6. Помимо отрисовки новых спрайтов, одновременно стираем старые, оставшиеся с предыдущего кадра. Таким же образом, с сортировкой и сравнением адресов.
    7. На выходе получаем небольшой массив, который по сути содержит дельта-информацию: чем новый кадр отличается от старого. Выводим этот массив на экран MOV (R1)+,@(R1)+ Так у нас сделано в демке «Good Apple». Это гораздо быстрей, чем копировать полный экран.

    Плюсы такого подхода:
    + При выводе спрайтов на экран ничего не мерцает.
    + Нужно мало памяти. Сможем сделать даже на БК-0010.
    + Быстрее, чем рисовать в экранном буфере и потом копировать его.

    Минусы:
    - Нужно продумывать детали. Неизведанная территория, так никто ещё не делал.
    - Сортировка и поиск в массиве могут оказаться медленными. Суммарного выигрыша в скорости не получится.

    Статические объекты (геометрия лабиринта) во всём описанном не участвуют, так как персонажи летают только поверх чёрного фона. Статику рисуем только один раз при входе в новую комнату.
    manwe.pdp-11.ru

  2. #142

    Регистрация
    22.03.2018
    Адрес
    г. Усть-Каменогорск, Казахстан
    Сообщений
    1,410
    Спасибо Благодарностей отдано 
    91
    Спасибо Благодарностей получено 
    178
    Поблагодарили
    138 сообщений
    Mentioned
    21 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Идея интересная, но скорее всего с быстродействием проблемы будут, много предварительных расчетов. Хотя сам вывод и быстрее будет. Я вот схалтурил, просто при выводе спрайта со всех сторон по точке стираю, быстро и не мерцает. (перед этим спрайт в буфере сдвигаю и BISом накладываю)

  3. #143

    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    1,724
    Спасибо Благодарностей отдано 
    167
    Спасибо Благодарностей получено 
    406
    Поблагодарили
    257 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от S_V_B Посмотреть сообщение
    Я вот схалтурил, просто при выводе спрайта со всех сторон по точке стираю, быстро и не мерцает. (перед этим спрайт в буфере сдвигаю и BISом накладываю)
    А если два спрайта пересекаются в одном экранном слове – неужели в этом месте не мерцает?
    manwe.pdp-11.ru

  4. #144

    Регистрация
    22.03.2018
    Адрес
    г. Усть-Каменогорск, Казахстан
    Сообщений
    1,410
    Спасибо Благодарностей отдано 
    91
    Спасибо Благодарностей получено 
    178
    Поблагодарили
    138 сообщений
    Mentioned
    21 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    /* два спрайта пересекаются в одном экранном слове – неужели в этом месте не мерцает? */
    Враги движутся достаточно быстро, определение столкновений - прямоугольник (враги чаще движутся по диагонали), пока заметишь мерцание - уже взрыв нужно выводить.
    Возможно я не увидел всех "частных" случаев, буду решать проблемы по мере поступления. (либо маску придется добавлять)

  5. #145

    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    1,724
    Спасибо Благодарностей отдано 
    167
    Спасибо Благодарностей получено 
    406
    Поблагодарили
    257 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от S_V_B Посмотреть сообщение
    определение столкновений - прямоугольник
    Попробую придумать как во время отрисовки пушки проверять столкновения с точностью до пикселя (понятно что командой BIT, но непонятно пока - для любых спрайтов или отдельно для пушки).
    manwe.pdp-11.ru

  6. #146

    Регистрация
    22.03.2018
    Адрес
    г. Усть-Каменогорск, Казахстан
    Сообщений
    1,410
    Спасибо Благодарностей отдано 
    91
    Спасибо Благодарностей получено 
    178
    Поблагодарили
    138 сообщений
    Mentioned
    21 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Меня удручает быстродействие. В итоге мудреные алгоритмы придется откинуть. Нужно минимум действий - максимум эффективности.
    Я бы сделал с двумя экранами, но пока не могу придумать как их переключать достаточно синхронно.. ПП живет своей жизнью
    Тогда можно было проверять пространство под спрайтом при выводе (поскольку фон черный) зная квадрат врага выводить пока не будет 1-1.

    Кстати в версии для PC просто стирают фон в предыдущем расположении спрайта и никаких морганий.. нам такая роскошь недоступна
    Последний раз редактировалось S_V_B; 19.11.2018 в 18:35.

  7. #147

    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    1,724
    Спасибо Благодарностей отдано 
    167
    Спасибо Благодарностей получено 
    406
    Поблагодарили
    257 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от S_V_B Посмотреть сообщение
    Меня удручает быстродействие. В итоге мудреные алгоритмы придется откинуть. Нужно минимум действий - максимум эффективности.
    Да, вот сейчас думаю, что не нужна мне сортировка. Если движущихся объектов мало, то вместо сортировки проще тупо перебрать все объекты подряд, сравнивая не совпадает ли адрес.
    manwe.pdp-11.ru

  8. #148

    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    1,724
    Спасибо Благодарностей отдано 
    167
    Спасибо Благодарностей получено 
    406
    Поблагодарили
    257 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Пока что столкнулся с дилеммой.

    Спрайты лучше хранить по байтам, а не по словам, чтобы меньше места занимали. Ширина получается кратной четырём пикселям, а не восьми, значит для многих (но не для всех) спрайтов мы будем экономить целый столбец байтов. С другой стороны, выводить на экран быстрее словами, чем байтами. Это известная дилемма, но я не о ней. Всё гораздо хуже:

    Я составляю список изменений на экране (новый кадр по отношению к старому) в таком виде: значение1, адрес1, значение2, адрес2,.. значениеN, адресN. Если адрес уже встречался в списке, то значение перезаписывается поверх существующего (там коротенький поиск в пределах одной экранной строки).
    Поскольку спрайты хранятся байтами, адреса вывода на экран могут быть нечётными. Соседние два байта будут храниться двумя записями с чётным и нечётным адресами. Выходит, что в этом списке все "значения" будут содержать по лишнему пустому байту. Тратится лишнее место. Но главное, что вывод командой MOVB (R1)+,@(R1)+ становится невозможным, так как R1 будет переставляться на следующую запись неправильно.
    Придумал хитрость: если адрес нечётный, то переделывать его в чётный и класть "значение" в старший байт. Тогда все адреса в списке получаются чётными, всё круто. Но! Теперь оказывается, что невозможно заранее посчитать сколько слов у нас получится при выводе. Так как чётные и нечётные смешиваются непредсказуемо (зависит от X-координаты каждого спрайта). Раньше с байтами было просто: ширина спрайта (+1 с учётом сдвига) и так для каждого спрайта, приходящегося на эту экранную строку. В сумме знаем сколько байт надо вывести в каждую экранную строку. А теперь при смешивании байтов в слова уже не знаем.

    И вот дилемма: придумывать какой-то костыль для правильного подсчёта? Это затормозит работу алгоритма.
    Либо хранить спрайты не байтами, а словами, тогда проще подсчёт и проще обращение со списком изменений. Но тормознутей сдвиг спрайтов (потому что становится возможным сдвиг уже не на 3, а на 7 пикселей).

    Какой путь выбрать?
    Последний раз редактировалось Manwe; 28.11.2018 в 13:36.
    manwe.pdp-11.ru

  9. #149

    Регистрация
    20.12.2005
    Адрес
    Москва
    Сообщений
    2,048
    Спасибо Благодарностей отдано 
    1,141
    Спасибо Благодарностей получено 
    1,461
    Поблагодарили
    521 сообщений
    Mentioned
    20 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Manwe, во всех своих проектах на УКНЦ использую для тайлов/спрайтов хранение словами -- каждое слово это 8x1 пикселей в 4 цвета -- для вывода через ЦП передачей слова сразу в порт. Иначе слишком много времени тратится на подготовку данных для вывода на экран.

  10. #150

    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    1,724
    Спасибо Благодарностей отдано 
    167
    Спасибо Благодарностей получено 
    406
    Поблагодарили
    257 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Так-то да, но ведь место жалко. Я хочу уложиться в 16 kb БК-0010.
    manwe.pdp-11.ru

Страница 15 из 23 ПерваяПервая ... 111213141516171819 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Портирование Lode Runner БК->УКНЦ
    от nzeemin в разделе ДВК, УКНЦ
    Ответов: 103
    Последнее: 12.12.2020, 04:04
  2. Ответов: 21
    Последнее: 04.10.2019, 18:03
  3. Портирование Stop the Express
    от nzeemin в разделе ДВК, УКНЦ
    Ответов: 90
    Последнее: 21.11.2018, 09:46
  4. Ответов: 38
    Последнее: 23.11.2014, 16:00

Ваши права

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