User Tag List

Страница 13 из 53 ПерваяПервая ... 91011121314151617 ... ПоследняяПоследняя
Показано с 121 по 130 из 526

Тема: Новый принцип устранения клешинга

  1. #121

    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,829
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    663
    Поблагодарили
    513 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

    тут же будут выводится сначала фон в слой фона
    а это по вашему уже должно будет стирать более верхние слои спрайтов

    а потом только будут рисоваться сами спрайты


    а если луч пройдет по еще не отрисованому спрайту
    а отрисовка фона уже идет(стирающая все в верхних слоях)
    вот тебе и мигание

    посмотри 99% игр для Львов ПК01
    и как выглядеть это уныние

    хотя если выводить строку фона туда строку спрайта туда
    вероятность встретится с лучом будет низкой
    но это сильное замедление
    мало того что куча out-ов в порт маски
    так еще и куча смен слоя туда сюда

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

  3. #122

    Регистрация
    16.08.2005
    Адрес
    Estonia,Tallinn
    Сообщений
    1,131
    Спасибо Благодарностей отдано 
    55
    Спасибо Благодарностей получено 
    257
    Поблагодарили
    195 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ой, а с клэшингом зачем бороться тогда, раз единственный критерий - абсолютно минимальные изменения? С ним-то изменений вообще не нужно)))
    затем что новый софт для платформы появляется с частотой 0.01 в год и к нему интерес 0.01% от аудитории

  4. #123

    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,829
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    663
    Поблагодарили
    513 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    зачем бороться тогда
    Цитата Сообщение от Raydac Посмотреть сообщение
    затем что
    да какая разница
    главное с чем то бороться

  5. #124

    Регистрация
    18.09.2008
    Адрес
    Донецкая обл.
    Сообщений
    95
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    39
    Поблагодарили
    17 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    в оригинале на экран выводиться уже совмещенные значения
    Совмещенные значения ЧЕГО с ЧЕМ?

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    а это по вашему уже должно будет стирать более верхние слои спрайтов
    а потом только будут рисоваться сами спрайты
    Хорошо. Давайте рассмотрим процесс поподробнее. Что нам нужно? - Нам нужно убрать спрайт на старом месте и нарисовать на новом.
    Как обычно убирается спрайт в обычных спековских играх? Есть несколько распространенных методов.
    Если спрайт выведен по XOR, то нужно еще раз сделать XOR - делаем это в слое спрайта, фон тут не затрагивается вообще.
    Второй вариант - фон под спрайтом запоминается где-то в буфере, при стирании возвращается на место. Значит перед выводом спрайта переключаем слой. Старая процедура честно сохраняет нули из слоя спрайта в буфер, считая это фоном. А потом при стирании также возвращает эти нули на место. Сам фон опять не затрагивается.
    Третий вариант - спрайт стирается перерисовкой куска фона из буфера фона и затем рисуется на новом месте. Тоже принципиально ничего не меняем. Старая процедура честно пытается восстановить кусочек фона, при этом стирая спрайты над ним, и потом рисует спрайты заново в новом месте.

    То, что при наложении маски читается фон, на него накладывается маска и т.д. - теряет свое первоначальное значение. То, что старая процедура вывода принимает за фон, на самом деле нули из слоя спрайтов, вот в чем вся хитрость. Если маскированные спрайты не накладываются друг на друга в одном слое - маску достаточно выбросить в порт маски, не нужно ни читать старое значение, ни делать AND и т.п, так как старое значение === нули из слоя спрайтов. Это кстати освобождает место и такты для вывода маски в порт.

    Как видите ничего принципиально не меняется. Если оно мерцало до, будет мерцать и после. А если не мигало, то зачем ему мигать?

  6. #125

    Регистрация
    26.11.2013
    Адрес
    г. Новосибирск
    Сообщений
    1,102
    Спасибо Благодарностей отдано 
    1,336
    Спасибо Благодарностей получено 
    323
    Поблагодарили
    152 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от inozemcew Посмотреть сообщение
    Старая процедура честно пытается восстановить кусочек фона, при этом стирая спрайты над ним
    Не совсем понятно. Перерисовываем фон, включен нулевой слой. И при этом стираются байты в слоях с 1 по 7 ???
    Возможно придётся код перерисовки фона переписать в код обнуления в слое стираемых спрайтов.

  7. #126

    Регистрация
    18.09.2008
    Адрес
    Донецкая обл.
    Сообщений
    95
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    39
    Поблагодарили
    17 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    Кстати, чем это выбор слоя перед печатью спрайта "минимальнее" выбора активного цвета? Ведь фактически выбор слоя - тоже способ выбора цвета, только неинтуитивный и расточительный.
    Суть проблемы не просто в цвете, а в том, что надо неким образом различать объекты на экране, в данном случае спрайты. Это нужно хотя бы потому, что вывод пикселей и установка цвета для них с помощью атрибутов - отдельные и независимые операции. Плюс к этому, в спековских играх метод "вывел и забыл" работает далеко не всегда. Т.е. надо как-то помнить какие пиксели от чего. Разделение на слои и помогает с этим справиться.

    - - - Updated - - -

    Цитата Сообщение от Reobne Посмотреть сообщение
    Не совсем понятно. Перерисовываем фон, включен нулевой слой. И при этом стираются байты в слоях с 1 по 7 ???
    Конечно. Именно так оно и работает в обычном спеке. Перерисовывается фон, при этом стираются спрайты. Его для этого и перерисовывают, чтобы стереть спрайты. Именно так и делают "старые" игры.
    Теперь, когда спрайты находятся в своих слоях, фон перерисовывать не надо, но по логике работы программы, она хочет стереть все спрайты. Она так сделана, и собственно, сделать по другому в стандартном экране не получится. Мы стараемся максимально использовать логику "старой" игры. Поэтому, когда рисуется фон, надо стирать все спрайты над фоном в этом месте. Дальше, походу, должен быть вывод всех этих спрайтов, просто потому, что в оригинале перерисовка фона их тоже затирала.

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

  8. #127

    Регистрация
    26.11.2013
    Адрес
    г. Новосибирск
    Сообщений
    1,102
    Спасибо Благодарностей отдано 
    1,336
    Спасибо Благодарностей получено 
    323
    Поблагодарили
    152 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от inozemcew Посмотреть сообщение
    Перерисовывается фон, при этом стираются спрайты.
    Так, ладно. А если мы красим 1-й слой, то стираются-ли слои 2-7?

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

    Я удивлён, так как себе это не так представлял. Казалось, что каждый слой независим, и распределён хакером_адаптации в свою функциональную область, исходя из анализа конкретной игры.
    Взять хоть того-же Рембо, бочки на полу. Чтобы их расклешить это уже 2 слоя на фон нужно.
    Или Диззи, Деревья коричневые, листья на них зелёные, оба элемента являются фоном.

  9. #128

    Регистрация
    25.11.2015
    Адрес
    г. Москва
    Сообщений
    192
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    14 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Чтобы полностью устранить проблему нужно выводить атрибуты перед спрайтом, спрайт выводить по маске, а на каждую точку добавить по одному байту для хранения её атрибутов. Такой вариант будет эквивалентен 256 слоям пронумерованным по комбинации атрибутов. Работать это будет следующим образом: записываем атрибут, записываем маску, записываем 8 точек, при этом аппаратно должен читаться атрибут и записываться к тем из 8 точек, запись в которые разрешения маской. Основной минус данного режима в том, что теряется совместимость с мультиколором, поэтому где-то нужно добавить бит для включения данного режима.

  10. #129

    Регистрация
    18.09.2008
    Адрес
    Донецкая обл.
    Сообщений
    95
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    39
    Поблагодарили
    17 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Reobne Посмотреть сообщение
    Так, ладно. А если мы красим 1-й слой, то стираются-ли слои 2-7?
    Трудный вопрос. Групповая очистка нужна однозначно. Просто потому, что отрисовка фона подразумевает очистку спрайтов, и делать это отдельно для каждого слоя не имеет смысла - это в несколько раз больше работы для Z80.

    Цитата Сообщение от Reobne Посмотреть сообщение
    Взять хоть того-же Рембо, бочки на полу. Чтобы их расклешить это уже 2 слоя на фон нужно
    Там такая ситуация - фон под спрайтами копируются в буфер и потом спрайты стираются копированием из буфера обратно. Т.е. фон достаточно нарисовать один раз и больше не трогать, а потом только работать со спрайтовыми слоями. А вот с бочками я таки погорячился. Там они хранятся без маски, нарисованные стоящими на досках. Т.е. нет простого способа вывести их без клэшинга. Надо допиливать напильником графику.

    В общем сложно сказать исходя чисто из теории, но наверное стоит делать очистку вышележащих слоев опциональной. Например с помощью старшего бита номера. Бит == 0, вышележащие слои очищаются при записи в текущий, если равен 1 - то не очищаются. Соответственно теоретическое максимальное количество слоев не больше 128. На данный момент, а там посмотрим. Ну и равноправие слоев тоже восстановлено.

    - - - Updated - - -

    Цитата Сообщение от blackmirror Посмотреть сообщение
    Работать это будет следующим образом: записываем атрибут, записываем маску, записываем 8 точек,
    Уточните, пожалуйста, куда что записывается? Атрибут куда - в порт, в область атрибутов, еще куда-то?

    Как потом стереть такой спрайт?

  11. #130

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,963
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    319
    Спасибо Благодарностей получено 
    312
    Поблагодарили
    236 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от inozemcew Посмотреть сообщение
    Суть проблемы не просто в цвете, а в том, что надо неким образом различать объекты на экране, в данном случае спрайты. Это нужно хотя бы потому, что вывод пикселей и установка цвета для них с помощью атрибутов - отдельные и независимые операции.
    свой атрибут на каждый пиксель - и нет проблем

    Цитата Сообщение от inozemcew Посмотреть сообщение
    Плюс к этому, в спековских играх метод "вывел и забыл" работает далеко не всегда. Т.е. надо как-то помнить какие пиксели от чего. Разделение на слои и помогает с этим справиться.
    Ну и как же разделение на слои нам поможет справиться, например, с положением, когда старый код захотел атрибутно перекрасить один из наложенных в одном слое (потому что были одного цвета) спрайтов? Вообще привязка спрайтов или цветов к слоям потому плохая идея (как и в принципе иерархичная организация по слоям), что в оригинальной "однослойной" графике с клэшингом порядок наложения объектов свободный, и со слоями мы рискуем получить другую картинку не только в смысле устранения клэшинга (да и то неполного устранения), но и в смысле (не)видимости объектов, что даже на играбельность и проходимость может влиять. Схема же с нормальным выбором рабочего цвета позволяет и накладывать объекты в любом порядке, и от клэшинга избавиться совершенно, и сложных схем очистки не городить.
    Прихожу без разрешения, сею смерть и разрушение...

Страница 13 из 53 ПерваяПервая ... 91011121314151617 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ответов: 43
    Последнее: 03.10.2015, 07:09
  2. принцип переключения адресных страниц в ПЗУ
    от Руслан в разделе Несортированное железо
    Ответов: 11
    Последнее: 10.04.2013, 16:50
  3. AY принцип формирования сигнала.
    от Руслан в разделе Звук
    Ответов: 5
    Последнее: 29.03.2013, 17:08
  4. Принцип работы M1 на Scorpion
    от TmK в разделе Программирование
    Ответов: 8
    Последнее: 17.08.2009, 15:40

Ваши права

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