User Tag List

Показано с 1 по 10 из 317

Тема: GameNoname

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    29.06.2022
    Адрес
    г. Ирвайн, США
    Сообщений
    408
    Спасибо Благодарностей отдано 
    590
    Спасибо Благодарностей получено 
    340
    Поблагодарили
    109 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от svofski Посмотреть сообщение
    Я к тому, что может быть просто рисовать как рисуется и все, не думать пока о мелочах. Нормально обогнать луч тяжело. Ты еще устанешь от этого, а потом переделаешь что-то в игре и все придется заново придумывать.

    Meanwhile, такая безумная идея -- что если пожертвовать 8К для слоя маски? На самом деле меньше, потому что не весь экран ведь задействован. Жирно конечно, но открываются дополнительные возможности пятачка

    Назовем его слой Ъ. Вначалѣ Ъ пустъ.

    Кадр 1.

    Затираем группу спрайтов 1 в предыдущей позиции. Затираем только те биты, которые не установлены на соответствующем месте в слое Ъ (в первом кадре это все биты)
    Рисуем группу спрайтов 1 в новой позиции и OR-им маску в слой Ъ.

    Кадр 2.

    Затираем группу спрайтов 2 в предыдущей позиции. Затираем только те биты, которые не установлены на соотв. месте в слое Ъ (тут мы обходим стороной то, что было отрисовано в первом кадре)
    Рисуем группу спрайтов 2 в новой позиции и OR-им маску в слой Ъ.

    ... так продолжается столько, сколько предусмотрено промежуточных фаз ...

    Кадр X межфазный. Чистим слой Ъ и все начинается сначала.

    Интересно. Если я правильно понимаю, то если чистить слой ъ целиком, то спрайты в кадрах 2,3 и остальных межфазных кадрах потеряют возможность быть корректно сбленджеными так как при новой фазе могут быть стёрты. Или я что-то упустил?

    - - - Добавлено - - -

    Цитата Сообщение от jerri Посмотреть сообщение
    ага дельта тайминг. разумно.
    Но я обычно вешаю обработку на прерывание.

    8к много - столько не нужно.
    используй блоки 8*8 для маркировки освежения местности.
    В прерывании держать апдейт для меня означает что я не смогу ничего нарисовать когда луч вверху экрана в области бордюра.
    Сейчас обработчик выполняется в середине кадра. В начале кадра рисуется то что в нижних позициях, а после апдейта рисуется то что нужно в верхних позициях. Таким образом я избавляюсь от пересечения с лучем.

    - - - Добавлено - - -

    По поводу моего метода разделения области отрисовки на 4 вертикальные области.
    svofski, да, ты прав что спрайты могут скучковаться в одной области. Но для меня будет ок такие случаи имхо. На msx и nes тоже есть подобное ограничение. Спрайты начинают моргать. Если не получится это излечить, то думаю это ок.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2

    Регистрация
    20.06.2007
    Адрес
    С.-Петербург
    Сообщений
    4,307
    Спасибо Благодарностей отдано 
    1,032
    Спасибо Благодарностей получено 
    818
    Поблагодарили
    489 сообщений
    Mentioned
    26 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от parallelno Посмотреть сообщение
    Интересно. Если я правильно понимаю, то если чистить слой ъ целиком, то спрайты в кадрах 2,3 и остальных межфазных кадрах потеряют возможность быть корректно сбленджеными так как при новой фазе могут быть стёрты. Или я что-то упустил?
    Нет, маска в Ъ блокирует только затирание. У тебя беда в том, что межфазное затирание может затереть предыдущую фазу. Эта маска как раз не дает этого сделать.

    Затиралка маскирует затирание по маске из Ъ.

    Рисовалка делает ИЛИ своей маски в Ъ. В остальном она рисуется как раньше. Блендится со всем предыдущим.

    Может быть правда можно обойтись просто пометкой блоков 8х8, как говорит jerri, но чего-то я пока не соображу как.
    Больше игр нет

  4. #3

    Регистрация
    29.06.2022
    Адрес
    г. Ирвайн, США
    Сообщений
    408
    Спасибо Благодарностей отдано 
    590
    Спасибо Благодарностей получено 
    340
    Поблагодарили
    109 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от svofski Посмотреть сообщение
    Нет, маска в Ъ блокирует только затирание. У тебя беда в том, что межфазное затирание может затереть предыдущую фазу. Эта маска как раз не дает этого сделать.

    Затиралка маскирует затирание по маске из Ъ.

    Рисовалка делает ИЛИ своей маски в Ъ. В остальном она рисуется как раньше. Блендится со всем предыдущим.

    Может быть правда можно обойтись просто пометкой блоков 8х8, как говорит jerri, но чего-то я пока не соображу как.
    Про первые межфазные кадры понятно что маска будет блокировать. Но как она поможет в первом кадре новой фазы если она будет очищена? Вот это я не пойму.

    - - - Добавлено - - -

    В методе Jerry меня смущает оверхед на установку/восстановление стека, и других параметров спрайта каждый раз для маленького блока 8*8. Но возможно это как-то тоже можно избежать.

    - - - Добавлено - - -

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

    - - - Добавлено - - -

    в теории этот стенсил буфер можно готовить каждый кадр для всех спрайтов которые не нужно перерисовать в текущем кадре. Затем для спрайта который нужно отрисовать в текущем кадре удаляется с экрана его старая версия по маске стенсила чтобы не испортить те спрайты которые не нужно перерисовать. Затем на экран рисуется этот спрайт с маской чтобы не запортить уже нарисованные спрайты. Если в текущем кадре нужно обновить ещё один спрайт, то нужно в стенсил буфер нарисовать маску спрайта который на предыдущем шаге отрисовал на экран.

    - - - Добавлено - - -

    Можно попробовать для начала стирать спрайты не блоком как сейчас, а по маске спрайта. С учётом того что спрайты двигаются на 2 пикселя, то по идее глюки где не восстановиливается изображение после стерания будет небольшим.

  5. #4

    Регистрация
    20.06.2007
    Адрес
    С.-Петербург
    Сообщений
    4,307
    Спасибо Благодарностей отдано 
    1,032
    Спасибо Благодарностей получено 
    818
    Поблагодарили
    489 сообщений
    Mentioned
    26 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от parallelno Посмотреть сообщение
    Но как она поможет в первом кадре новой фазы если она будет очищена?
    В первом кадре новой фазы она будет пустая, потому что в первом кадре новой фазы ей нечего защищать.

    Слово стенсил подходит. Чистить его надо будет не каждый кадр, а после отрисовки всех спрайтов. Допустим у тебя все разбито на 4 кадра:

    Начали. Отрисовали кадр 1, 2, 3, 4 (все это время маска там копится, не давая затиралке из кадра 2 затереть то, что было нарисовано в кадре 1). Очистили. Отрисовали кадр 1, 2, 3, 4. Очистили. итд

    Первому кадру не надо стирать с маской, потому что там гарантировано пусто, а последнему незачем рисовать в маску, потому что она будет стерта сразу после отрисовки. На этом можно сэкономить.
    Больше игр нет

  6. #5

    Регистрация
    29.06.2022
    Адрес
    г. Ирвайн, США
    Сообщений
    408
    Спасибо Благодарностей отдано 
    590
    Спасибо Благодарностей получено 
    340
    Поблагодарили
    109 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    svofski, приведу пример который меня смущает. У нас два спрайта один перекрывает второй частично. Первый был нарисован в первой межфазе. Второй в последней межфазе.
    Теперь мы очищаем стенсил маску.
    Начинается новая фаза. Как стереть старый первый спрайт не поломав второй если у нас нет информации в стенсиле где он нарисован?

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

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

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

Ваши права

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