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

User Tag List

Страница 2 из 4 ПерваяПервая 1234 ПоследняяПоследняя
Показано с 11 по 20 из 34

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

  1. #11
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    3,494
    Благодарностей: 729
    Mentioned
    2 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.
    [02.05.2014] не забудь этот день. Чубайс должен умереть. Dixi.
    [l'Abbey des morts TSEvo EV...5%] kiwi кошелек +79178162712

  2. Этот пользователь поблагодарил jerri за это полезное сообщение:
    SaNchez (02.01.2017)

  3. #12
    Master Аватар для Bedazzle
    Регистрация
    02.05.2015
    Адрес
    г. Таллин, Эстония
    Сообщений
    680
    Благодарностей: 143
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  4. #13
    Master Аватар для SaNchez
    Регистрация
    22.12.2007
    Адрес
    г. Владивосток
    Сообщений
    922
    Благодарностей: 760
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  5. #14
    Master Аватар для SaNchez
    Регистрация
    22.12.2007
    Адрес
    г. Владивосток
    Сообщений
    922
    Благодарностей: 760
    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

  6. #15
    Veteran Аватар для drbars
    Регистрация
    02.03.2005
    Адрес
    Новосибирск
    Сообщений
    1,668
    Благодарностей: 706
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

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

  7. Этот пользователь поблагодарил drbars за это полезное сообщение:
    Bedazzle (05.01.2017)

  8. #16
    Master Аватар для Bedazzle
    Регистрация
    02.05.2015
    Адрес
    г. Таллин, Эстония
    Сообщений
    680
    Благодарностей: 143
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

  10. #17
    Activist Аватар для PheeL
    Регистрация
    19.01.2005
    Адрес
    Москва
    Сообщений
    331
    Благодарностей: 95
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  11. #18
    Veteran Аватар для drbars
    Регистрация
    02.03.2005
    Адрес
    Новосибирск
    Сообщений
    1,668
    Благодарностей: 706
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  12. #19
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    3,494
    Благодарностей: 729
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    PheeL, Walker используется подобная технология для ГГ
    остальные увы - так делать неэфективно
    С уважением,
    Jerri / Red Triangle.
    [02.05.2014] не забудь этот день. Чубайс должен умереть. Dixi.
    [l'Abbey des morts TSEvo EV...5%] kiwi кошелек +79178162712

  13. #20
    Master Аватар для SaNchez
    Регистрация
    22.12.2007
    Адрес
    г. Владивосток
    Сообщений
    922
    Благодарностей: 760
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

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

Страница 2 из 4 ПерваяПервая 1234 ПоследняяПоследняя

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

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

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

Похожие темы

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

Ваши права

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