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

User Tag List

Страница 3 из 9 ПерваяПервая 1234567 ... ПоследняяПоследняя
Показано с 21 по 30 из 90

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

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

    По умолчанию

    Цитата Сообщение от jerri Посмотреть сообщение
    PheeL, Walker используется подобная технология для ГГ
    остальные увы - так делать неэфективно
    Да, конечно, такой вариант предпочтительнее для средних и крупных спрайтов.
    Ещё одну проблему нашёл при таком способе - очень сильно будет скакать скорость вывода в зависимости от кол-ва спрайтов на экране и их текущих кадров. Т.е. при синхронизации фреймрейта либо сразу на худший вариант закладываться, либо как-то динамически распределять остаток времени после вывода придётся.
    Короче, ясно, довольно муторное это дело при несильно большом выигрыше в памяти.
    Sinclair ZX Spectrum 128k (Toastrack) + ZX Spectrum +3 + DivMMC EnJOY
    Commodore 64c + 1541 Ultimate II
    Commodore Amiga 1200 + 8Mb Fast + CF 8Gb + GOTEK

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

    По умолчанию

    FYI, Jerri удалось максимально оптимизировать вывод спрайтов любой ширины, со сдвигом от 1 до 7, через таблицу длинной 3584 (#0e00) байт.

    Инициализация таблицы смещений:
    Код:
    init_offset_tab     ld hl,offset_tab
                        ld b,1
    init_offset_tab_1   push bc
                        ld d,l,e,0
    init_offset_tab_2   srl d
                        rr e
                        djnz init_offset_tab_2
                        ld (hl),d
                        inc h
                        ld (hl),e
                        dec h
                        inc l
                        pop bc
                        jr nz,init_offset_tab_1
                        inc h,h,b
                        ld a,b
                        cp 8
                        jr nz,init_offset_tab_1	
                        ret
    Вывод одного байта с маской:
    Код:
    HL = адрес на экране 
    HL' = адрес спрайта
    D' = старший байт адреса таблицы смещений offset_tab
    BC' = данные предыдущего байта (в начале каждой линии нужно обнулять)
    
    ld  a,(hl)
    exx
    or  c
    xor  b
    ld  e,(hl)
    inc  hl ;в частном случае можно inc l
    ld  b,(hl)
    inc  hl ;в частном случае можно inc l
    ex  de,hl
    or  (hl)
    inc  h
    ld  c,(hl)
    ld  l,b
    ld  b,(hl)
    dec  h
    xor  (hl)  
    ex  de,hl
    exx
    ld  (hl),a
    
    
    В конце линии нужно вывести остатки из BC'
    
    ld  a,(hl)
    exx
    or  c
    xor  b
    exx
    ld (hl),a
    Итого: 104 такта на один байт с маской (100 тактов в частном случае).
    Последний раз редактировалось SaNchez; 07.06.2017 в 03:35.

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

    dimidus (22.01.2021)

  4. #23
    Guru Аватар для newart
    Регистрация
    19.01.2005
    Адрес
    Санкт-Петербург
    Сообщений
    11,435
    Спасибо Благодарностей отдано 
    191
    Спасибо Благодарностей получено 
    145
    Поблагодарили
    61 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от SaNchez Посмотреть сообщение
    YI, Jerri удалось максимально оптимизировать вывод спрайтов любой ширины, со сдвигом от 1 до 7, через таблицу длинной 3584 (#0e00) байт.
    Полезная процедурка, был бы клипинг можно было бы Star Wars возродить попробовать ))

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

    По умолчанию

    Можешь спрайты расположить на "ковре", как этот способ называет Jerri. В общем, спрайты на холсте 256х64 байта, ничего клиппить не надо, рисуешь только необходимый кусок.

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

    По умолчанию

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

    Построение таблиц с адреса #5С00 из Диззика:

    Код:
    	XOR A
    	LD L,A
    	LD B,A
    	LD DE,#6907
    T_L1	LD C,B
    	LD B,E
    	LD H,D
    	LD A,L
    T_L2	ADD A,A
    	RL C
    	LD (HL),A
    	DEC H
    	LD (HL),C
    	DEC H
    	DJNZ T_L2
    	INC L
    	JR NZ,T_L1
    Последний раз редактировалось drbars; 07.06.2017 в 22:11.

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

    По умолчанию

    drbars, обвязка все равно жрет меньше чем сам вывод
    и обвязка будет всегда.
    с быстрой процедурой или с медленной.
    С уважением,
    Jerri / Red Triangle.

  8. #27
    Guru Аватар для newart
    Регистрация
    19.01.2005
    Адрес
    Санкт-Петербург
    Сообщений
    11,435
    Спасибо Благодарностей отдано 
    191
    Спасибо Благодарностей получено 
    145
    Поблагодарили
    61 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от SaNchez Посмотреть сообщение
    Можешь спрайты расположить на "ковре", как этот способ называет Jerri. В общем, спрайты на холсте 256х64 байта, ничего клиппить не надо, рисуешь только необходимый кусок.
    Не понял. Откуда 256 и 64.

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

    По умолчанию

    Смотри. 256х64 байта потому-что это 16Кб, одна страница. Спрайты в странице лежат не линейно, а вот так (пример для спрайта 32х32 в верхнем левом углу холста/ковра):

    #c000: mask000, data000, mask001, data001, mask002, data002, mask003, data003
    #c100: mask004, data004, mask005, data005, mask006, data006, mask007, data007
    .....
    #df00: mask124, data124, mask125, data125, mask126, data126, mask127, data127
    Последний раз редактировалось SaNchez; 08.06.2017 в 03:04.

  10. #29
    Guru Аватар для Shiny
    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,121
    Записей в дневнике
    36
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    21
    Поблагодарили
    10 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А какие есть способы генерации масок спрайта? с TommyGun слишком мудрено.

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

    По умолчанию

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

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

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

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

Эту тему просматривают: 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

Ваши права

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