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

User Tag List

Страница 2 из 9 ПерваяПервая 123456 ... ПоследняяПоследняя
Показано с 11 по 20 из 90

Тема: Вывод спрайта любой ширины с точностью до пикселя.

  1. #11
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,746
    Спасибо Благодарностей отдано 
    256
    Спасибо Благодарностей получено 
    265
    Поблагодарили
    199 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Код:
    ;в данном случае концепт для спрайта 2 байта шириной
    
    ;de - адрес на экране
    ;hl ссылка на таблицу
    ;sp спрайт
    
    
    ld a,(de)
    
    ;левый байт
    
    pop bc
    ld l,c
    or (hl)
    ld l,b
    xor (hl)
    ld (de),a
    
    inc h
    inc e
    
    ld a,(de)
    ld l,c
    or (hl)
    ld l,b
    xor (hl)
    
    dec h
    
    ;правый байт
    
    pop bc
    
    ld l,c
    or (hl)
    ld l,b
    xor (hl)
    
    ld (de),a
    
    inc h
    inc e
    
    ;остаток правого байта переносим на экран
    
    ld a,(de)
    ld l,c
    or (hl)
    ld l,b
    xor (hl)
    
    ld (de),a
    
    ;далее пересчитываем адрес на экране, размер по вертикали и ссылку на таблицу 
    
    dec h
    С уважением,
    Jerri / Red Triangle.

  2. #12
    Veteran Аватар для Bedazzle
    Регистрация
    02.05.2015
    Адрес
    г. Таллин, Эстония
    Сообщений
    1,485
    Спасибо Благодарностей отдано 
    219
    Спасибо Благодарностей получено 
    149
    Поблагодарили
    115 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  3. #13
    Master Аватар для SaNchez
    Регистрация
    22.12.2007
    Адрес
    г. Владивосток
    Сообщений
    915
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    12
    Поблагодарили
    6 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Можно сделать классическую маску - AND/OR, а можно OR/XOR, где данные будут инвертированы, но в итоге получится та-же картинка на экране. Выигрыш - не нужно делать две 4kb таблицы, хватит одной. Дальше думай сам

  4. #14
    Master Аватар для SaNchez
    Регистрация
    22.12.2007
    Адрес
    г. Владивосток
    Сообщений
    915
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    12
    Поблагодарили
    6 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В общем, переделал процедуру на работу с таблицами. Получил хорошие показатели: 116 тактов на один байт с маской. По сравнению с реальными сдвигами - 110 тактов сдвиг в 1 пиксель, 214 тактов сдвиг в 4 пикселя.

    Код:
    ;ix - данные спрайта
    ;de - адрес на экране
    ;h - старший байт адреса таблицы для соответствующего сдвига
    ;bc - предыдущие значения маски/данных, в начале прорисовки строки = 0
    
                                                    ld l,(ix)
    						inc ix
    						ld a,(de)
    						or (hl)
    						or b
    						xor c
    						inc h
    						ld b,(hl)
    						ld l,(ix)
    						inc ix
    						ld c,(hl)
    						dec h
    						xor (hl)
    						ld (de),a

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

    DragonsLord (26.03.2021)

  6. #15
    Veteran
    Регистрация
    01.03.2005
    Адрес
    Новосибирск
    Сообщений
    1,979
    Спасибо Благодарностей отдано 
    69
    Спасибо Благодарностей получено 
    261
    Поблагодарили
    99 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    SaNchez, и итоге всё сильно будет зависеть от кол-ва памяти в игре.

    Давно я выкладывал пример без таблиц который. Если интересно поизучай. Самые медленные сдвиги на 3 и 5 в итоге.

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

  7. #16
    Veteran Аватар для Bedazzle
    Регистрация
    02.05.2015
    Адрес
    г. Таллин, Эстония
    Сообщений
    1,485
    Спасибо Благодарностей отдано 
    219
    Спасибо Благодарностей получено 
    149
    Поблагодарили
    115 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от drbars Посмотреть сообщение
    Давно я выкладывал пример без таблиц который.
    О, интересно!

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

  9. #17
    Activist Аватар для PheeL
    Регистрация
    19.01.2005
    Адрес
    Москва
    Сообщений
    333
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Можно глупый вопрос задать? Уже не напрямую к выводу относящийся, но тем не менее с ним связанный. Про экономию памяти. Знаю, что для этого часто прибегали к трюку, когда часть спрайта оставалась неизменяемая (туловище), а часть с анимацией (ноги) при движении. А что если сделать немного по-другому (это больше подойдёт к способу вывода без таблиц) - поскольку обычно анимация различных действий непрерывная и зацикленная, то что мешает делать как в запиляторе\видеокодеках - первый кадр спрайта основной, а остальное последовательные диффы (биты\маска)? Интересно насколько это выгоднее (придётся ведь оффсет всё-равно какой-то от начального кадра хранить дополнительно для каждого из блоков изменений и между ними)?
    И сразу же возникнет проблема - композинг спрайтов на экране когда они друг на дружку налезают. Ведь для каждого придётся отдельный буфер иметь иначе на что изменения накладывать?
    Последний раз редактировалось PheeL; 06.01.2017 в 02:53.
    Sinclair ZX Spectrum 128k (Toastrack) + ZX Spectrum +3 + DivMMC EnJOY
    Commodore 64c + 1541 Ultimate II
    Commodore Amiga 1200 + 8Mb Fast + CF 8Gb + GOTEK

  10. #18
    Veteran
    Регистрация
    01.03.2005
    Адрес
    Новосибирск
    Сообщений
    1,979
    Спасибо Благодарностей отдано 
    69
    Спасибо Благодарностей получено 
    261
    Поблагодарили
    99 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    PheeL, спрайты — это 10% кода игры. Способов вывода придумано много, таблицы движения, прекалькуляция движения, мегакод итд... Любая упаковка дельта кадрами это драгоценные такты, а их терять никто не хочет. Композинг тоже всяко делают, кто-то весь экран из буфера рисует, а кто-то подложку под спрайтом... или по XOR'у выводят.

  11. #19
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,746
    Спасибо Благодарностей отдано 
    256
    Спасибо Благодарностей получено 
    265
    Поблагодарили
    199 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    PheeL, Walker используется подобная технология для ГГ
    остальные увы - так делать неэфективно
    С уважением,
    Jerri / Red Triangle.

  12. #20
    Master Аватар для SaNchez
    Регистрация
    22.12.2007
    Адрес
    г. Владивосток
    Сообщений
    915
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    12
    Поблагодарили
    6 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от drbars Посмотреть сообщение
    SaNchez, и итоге всё сильно будет зависеть от кол-ва памяти в игре.

    Давно я выкладывал пример без таблиц который. Если интересно поизучай. Самые медленные сдвиги на 3 и 5 в итоге.
    Глянул исходники, скроллировать спрайт в буфере - идея не очень... До размеров 32х32 лучше двигать прямо в регистрах. Я обычно затягивал в стек спрайт из нужной банки, а потом pop-ами кидал в регистры. Это очень хорошо сочеталось с работой с двумя экранами.

    Сейчас меня волнуют спрайты с любой шириной, и в итоге таблицы подошли идеально, спасибо jerri за идею.

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

    dimidus (22.01.2021)

Страница 2 из 9 ПерваяПервая 123456 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Вывод спрайта по X,Y
    от drbars в разделе Программирование
    Ответов: 7
    Последнее: 20.03.2022, 10:43
  2. Спрайтовывыводилка с пиксельной точностью без таблиц
    от shadwork в разделе Программирование
    Ответов: 11
    Последнее: 20.08.2015, 20:23
  3. Поворот спрайта
    от Soplik в разделе Программирование
    Ответов: 22
    Последнее: 03.10.2011, 21:53
  4. куплю любой спекипум(минск)
    от fergus в разделе Барахолка (архив)
    Ответов: 5
    Последнее: 30.04.2009, 00:49
  5. Поворот спрайта
    от acidrain в разделе Графика
    Ответов: 9
    Последнее: 06.12.2008, 14:27

Ваши права

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