User Tag List

Страница 3 из 4 ПерваяПервая 1234 ПоследняяПоследняя
Показано с 21 по 30 из 31

Тема: Выводим спрайт, с проверкой границ экрана

  1. #21

    Регистрация
    01.03.2005
    Адрес
    Новосибирск
    Сообщений
    2,081
    Спасибо Благодарностей отдано 
    88
    Спасибо Благодарностей получено 
    480
    Поблагодарили
    145 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jerri Посмотреть сообщение
    drbars, могу кинуть свою нарезалочку
    Давай на почту. drbarsngs.ru

    Я решил не расчитывать на лету границы, а уже готовые параметры в таблице карт хранить. Так быстрее отрисовка и спрайт максимально 8*8 знакомест, с кратностью высоты 2.
    Последний раз редактировалось drbars; 02.01.2013 в 18:41.

  2. #22

    Регистрация
    19.01.2005
    Адрес
    Санкт-Петербург
    Сообщений
    11,555
    Спасибо Благодарностей отдано 
    205
    Спасибо Благодарностей получено 
    188
    Поблагодарили
    83 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    drbars, в чем кодишь? Графику кто рисует?

  3. #23

    Регистрация
    01.03.2005
    Адрес
    Новосибирск
    Сообщений
    2,081
    Спасибо Благодарностей отдано 
    88
    Спасибо Благодарностей получено 
    480
    Поблагодарили
    145 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от newart Посмотреть сообщение
    drbars, в чем кодишь? Графику кто рисует?
    100% pure asm

  4. #24

    Регистрация
    03.01.2006
    Адрес
    Рязань
    Сообщений
    2,935
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от drbars Посмотреть сообщение
    ля отрисовки статических локаций спрайтом произвольного размера.
    Весь экран за фрейм не заполнить. А стек занят.

  5. #25

    Регистрация
    18.02.2005
    Адрес
    Набережные Челны
    Сообщений
    1,574
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я свою капельку добавлю. Автор топика (drbars) выводит спрайты-полотна, а дырявые спрайты - состоящие из знакомсет правильнее, т.к. часто же половина спрайта заполнена нулями и чёрнотой.
    Самый быстрый способ вывода "дырявых" знакоместных спрайтов я нашёл для себя такой - это хранить адрес в атрибутной области, куда выводить атрибут, а быструю процедуру пересчёта атрибутов в пикселы я приводил уже в этюдах. Т.е. получив адрес знакоместа сразу записываем туда атрибут, в 35 тактов переходим в адреса пикселов, и записываем уже само знакоместо.
    Проверять на выход за границу экрана тоже просто - если добавить атрибутное смещение по X и Y в атрибутных же терминах, то если адрес получился за границами атрибутной области, то точно выводить не надо. Если 3 старших бита младшего байта поменялись - то аналогично, выводить не надо.

    Код такой

    ld bc,x+y*32 - координаты куда выводить, x и y могут быть отрицательными

    ....

    pop af - в аккумуляторе - атрибут
    pop hl - в hl - атрибутный адрес

    ld e,a

    ld a,l - запоминаем чтобы использовать старшие 3 бита
    add hl,bc

    xor l
    and %11100000 - сравниваем изменились ли эти биты, т.е. вписались ли по X
    jr nz,out_of_screen

    ld a,h
    cp #58 - проверяем был ли выход за атрибутную область, т.е. вписались ли по Y
    jr c,out_of_screen
    cp #5b
    jr nc,out_of_screen

    ld (hl),e - записываем атрибут

    ; преобразование адреса атрибутов в адрес знакоместа
    ld a,h ; 4
    ; and %00000011 ; 7 0 - так и хочется замаскировать эти биты, но эта операция не нужна,
    add a,a ; 4 8 - т.к. старшие биты уйдут по дальнейшей маске %00011111, а
    add a,a ; 4 12 - младшие биты забиты нулями по add a,a
    add a,a ; 4 16
    xor h ; 4 20
    and %00011111 ; 7 27 - сохраним нужные биты и обнулим ненужные 0-2
    xor h ; 4 31 - вытащили исходный адрес расположения
    ld h,a ; 4 35

    dup 4 ; 4 раза выводим пару пиксельных линий
    pop de
    ld (hl),e
    inc h
    ld (hl),d
    inc h
    edup

    получается очень быстро, заточенность на стек легко убираема.
    Последний раз редактировалось GriV; 05.01.2013 в 11:17.
    Биты рулят лучше байтов, байты рулят шустрее!
    View, Звук, Цвет

  6. #26

    Регистрация
    03.01.2006
    Адрес
    Рязань
    Сообщений
    2,935
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Чем не устраивает sub #50:rlca:rlca:rlca?

  7. #27

    Регистрация
    01.03.2005
    Адрес
    Новосибирск
    Сообщений
    2,081
    Спасибо Благодарностей отдано 
    88
    Спасибо Благодарностей получено 
    480
    Поблагодарили
    145 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я решил для себя ввести некоторые ограничения:

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

    2) На каждую длину каждого метода вывода будет отдельная процедурка.

  8. #28

    Регистрация
    18.02.2005
    Адрес
    Набережные Челны
    Сообщений
    1,574
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от alone Посмотреть сообщение
    Чем не устраивает sub #50:rlca:rlca:rlca?
    объясни?
    Биты рулят лучше байтов, байты рулят шустрее!
    View, Звук, Цвет

  9. #29

    Регистрация
    03.01.2006
    Адрес
    Рязань
    Сообщений
    2,935
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Пересчёт старшего адреса атрибутов в адрес на экране.

  10. #30

    Регистрация
    01.03.2005
    Адрес
    Новосибирск
    Сообщений
    2,081
    Спасибо Благодарностей отдано 
    88
    Спасибо Благодарностей получено 
    480
    Поблагодарили
    145 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от GriV Посмотреть сообщение
    dup 4 ; 4 раза выводим пару пиксельных линий
    pop de
    ld (hl),e
    inc h
    ld (hl),d
    inc h
    edup
    Здесь получаются те же 16 тактов на байт, аналогично LDI по скорости.
    10+7+4+7+4=32

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

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

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

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

Похожие темы

  1. времянки экрана Pentagon'а
    от siril в разделе Программирование
    Ответов: 6
    Последнее: 10.08.2011, 00:09
  2. Времянки экрана БК
    от Sandro в разделе БК-0010/0011
    Ответов: 18
    Последнее: 19.12.2010, 19:36
  3. посоветуйте спрайт-едитор
    от boo_boo в разделе Софт
    Ответов: 11
    Последнее: 15.03.2007, 10:43
  4. Самый большой спрайт игрока
    от goodboy в разделе Игры
    Ответов: 17
    Последнее: 21.08.2006, 07:52
  5. Разрешение экрана.
    от CityAceE в разделе Форум
    Ответов: 19
    Последнее: 06.03.2005, 06:37

Ваши права

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