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

User Tag List

Страница 10 из 32 ПерваяПервая ... 67891011121314 ... ПоследняяПоследняя
Показано с 91 по 100 из 317

Тема: GameNoname

  1. #91

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

    По умолчанию

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

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

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

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

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

  3. #92

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

    По умолчанию

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

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

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

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

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

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

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

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

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

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

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

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

  4. #93

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

    По умолчанию

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

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

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

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

  5. #94

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

    По умолчанию

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

  6. #95

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

    По умолчанию

    Да, так пожалуй не выйдет. Первая интерфаза затрет последнюю.
    Больше игр нет

  7. #96

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

    По умолчанию

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

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

    Можно ещё упростить отрисовку с если не вытирать по маске (ana), а только делать ora. Будет пошустрее. Плюс такого подхода не нужно хранить маску через байт с цветом. Экономия памяти под спрайты и вытирать по маске будет чуть быстрее.

  8. #97

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

    По умолчанию

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

    Есть карта тайлов, что-то типа 32х20. Вначале там все -1 (или какой-то еще признак отсутствия спрайта в клетке).
    Дополнительно таблица флагов: непересекается[N] - вначале все true, оптимизим.

    цикл i по всем спрайтам
    Берешь спрайт i. Определяешь какие клетки он занимает и -
    Если во всех клетках спрайта i пусто:
    записываешь в них индекс спрайта i.

    иначе, если там не пусто:
    непересекается[i] = false
    из каждой клетки под спрайтом i берешь число m (они могут быть разные), записываешь в таблицу флагов непересекается[m] = false
    Больше игр нет

  9. #98

    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,926
    Спасибо Благодарностей отдано 
    105
    Спасибо Благодарностей получено 
    291
    Поблагодарили
    217 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Когда фон чёрный, быстрее всего, конечно, выводить и стирать xor-ом. Другое дело, устроят ли артефакты при пересечении спрайтов...

    Этот пользователь поблагодарил b2m за это полезное сообщение:

    parallelno(31.08.2022)

  10. #99

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

    По умолчанию

    b2m, у меня данные спрайтов лежат на квазидиске. В момент отрисовки я их обязательно должен прочитать в регистровую пару bc. При таком способе xor тоже быстрее? Мне видится что нет, но может я что-то упускаю.

  11. #100

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

    По умолчанию

    А как xor тут вообще поможет? Он работает только если четное число раз ксорим сами с собой одно и то же. Даже если бы тут был черный фон, ксоры между разными спрайтами все перексорят к чортям.
    Больше игр нет

Страница 10 из 32 ПерваяПервая ... 67891011121314 ... ПоследняяПоследняя

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

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

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

Ваши права

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