- Спрайт графика [ редактировать ]
- Спрайт с высоким разрешением [ редактировать ]
- Многоцветный рисунок спрайта [ редактировать ]
- Строительство [ редактировать ]
- Программирование спрайтов на бейсике [ редактировать ]
- Настройки [ редактировать ]
- Спрайт включить [ редактировать ]
- генеральный
- Примеры
- Спрайтовые указатели [ редактировать ]
- [ редактировать ]
- Примеры
- Высокое разрешение или многоцветный режим [ редактировать ]
- Настройки цвета [ редактировать ]
- Примеры
- Двойная высота и / или ширина [ редактировать ]
- Примеры
- Приоритет спрайта [ редактировать ]
- Примеры
- Обнаружение столкновения [ редактировать ]
- Опрос для столкновений [ редактировать ]
- Прерывание при столкновении [ редактировать ]
- Анимация спрайтов [ редактировать ]
Спрайт , также называемый блоком подвижных объектов (сокращенно MOB ) в коммодор литература, это часть графики, которой можно перемещать и назначать атрибуты независимо от другой графики или текста на экране. VIC-II , который отвечает за эту особенность С-64 , поддерживает до восьми спрайтов, но с помощью растровое прерывание Программирование более восьми спрайтов может отображаться одновременно.
В то время как управление спрайтами печально известно просовывает их необходимо настроить, их большая сила заключается в способности быстро и легко перемещать графический объект и изменять его форму, просто задавая координаты и устанавливая указатель - устраняя необходимость постоянно рисовать и стирать графические объекты попиксельно ,
Справка по разработке спрайта (немецкий; Reihe = строка и Bitwert = значение бита).
Спрайт графика [ редактировать ]
Данные для спрайта высокого разрешения
«Шаблон» или «дизайн» как многоцветных, так и спрайтов с высоким разрешением всегда вписывается в «сетку» шириной 24 бита и высотой 21 бита; всего 504 бита, которые в свою очередь помещаются в 63 байта. Эти 63 байта хранятся в баран в течении ВИК банк начиная с адреса, кратного 64; то есть 0, 64, 128, 192, 256 и т. д.
Эта компоновка «перемежает» один неиспользуемый байт в каждом доступном 64-байтовом «блоке»; содержимое этого «64-го байта» не влияет на внешний вид спрайта. Теоретически, один банк VIC без зеркала кодировки ПЗУ может содержать 256 шаблонов спрайтов, но с учетом текстового экрана и набора символов практическое число не превышает 208 различных шаблонов.
Каждый байт содержит восемь битов (7-0), которые имеют следующие значения: 128, 64, 32, 16, 8, 4, 2 и 1. Если используется значение, устанавливается пиксель (бит) (см. Также пример изображения на правой стороне). Для установки всех пикселей сумма значений равна 255. Для различных шаблонов пикселей значения должны суммироваться вместе - как 170 для установки бита 1 (значение 2), 3 (значение 8), 5 (значение 32) и 7 (значение 128). Блок данных спрайта настроен так:
Байт 1 Байт 2 Байт 3 Байт 4 Байт 5 Байт 6 ... ... ... ... ... ... Байт 61 Байт 62 Байт 63
Спрайт с высоким разрешением [ редактировать ]
Справа растровое изображение 24 × 21, изображающее сплошной круг: сетка разделена на «полоски» по 8 пикселей или биты, т.е. на отдельные байты. Каждый байт читается с самым левым битом как самый старший, а самый правый бит - как самый младший. Байты читаются слева направо, строка за строкой (точно так же, как чтение обычного текста), и преобразование битового шаблона для этого примера в десятичные значения байтов приводит к цифрам, указанным справа от сетки. 63-байтовая последовательность, формирующая этот спрайт, начинается с 0, 126, 0, 3, 255, 192, 7, ...
Поскольку бит может принимать одно из двух состояний, каждый пиксель в спрайте высокого разрешения может выполнять одно из двух действий:
- Для битов, установленных в «0» в наборе данных спрайта, соответствующий пиксель будет прозрачным , то есть любая графика или цвет позади спрайта будет отображаться через эти пиксели.
- Биты, установленные на «1», заставят соответствующие пиксели в спрайте принимать индивидуальный цвет, установленный для каждого спрайта (см. Раздел настройки цвета ниже). Такие пиксели могут появляться либо спереди, либо «скрываться» за другими спрайтами или другой графикой; смотрите раздел приоритет спрайта ниже.
Многоцветный рисунок спрайта [ редактировать ]
В многоцветных спрайтах биты сгруппированы в пары, образуя пиксели, которые в два раза больше пикселей высокого разрешения. Поскольку каждый такой многоцветный пиксель определяется двумя битами данных, а не одним, каждый пиксель может выполнять одну из четырех вещей:
- Пиксели с парой битов «00» выглядят прозрачными, как биты «0» в режиме высокого разрешения.
- Пиксели с битовой парой "01" будут иметь цвет, указанный в адресе 53285 / $ D025.
- Пиксели с битовой парой «11» будут иметь цвет, указанный в адресе 53286 / $ D026.
- Пикселям с парой битов «10» будет присвоен цвет, назначенный данному спрайту в диапазоне 53287–53294 / $ D027 – D02E.
Обратите внимание, что два из трех «видимых» (непрозрачных) цветов будут общими для всех восьми спрайтов, тогда как третий видимый цвет может быть установлен индивидуально для каждого спрайта.
Строительство [ редактировать ]
Создание спрайтов вручную очень сложно, так что вы должны использовать редактор спрайтов , В некоторых ОСНОВНЫЕ расширения лайк Супер Экспандер 64 , Supergrafik , Бейсик симонс или в Бейсик 7.0 Существуют инструменты, другие подсказки и больше команд для разработки и программирования спрайтов. Например, команда BASIC SPRDEF в бейсике 7 C128 или в Super Expander 64 запускается редактор спрайтов.
Программирование спрайтов на бейсике [ редактировать ]
При программировании спрайтов в программе BASIC данные спрайтов также должны ДАННЫЕ линии и читать в ОЗУ с ЗА - СЛЕДУЮЩИЙ петля и основные команды ЧИТАТЬ а также POKE - например:
10 СЗ = 12288: REM Блок спрайтов 192 20 FOR X = 0 - 62: READ Y: POKE SZ + X, Y: NEXT X 30 DATA 255, 128, 16: REM 1-я строка данных ... (вставьте в эту строку 19 других строк DATA с 3 данными значения!) 50 ДАННЫХ 255, 128, 16: REM 21-я строка данных
Настройки [ редактировать ]
Помимо настройки данных для шаблона в оперативной памяти, использование спрайтов требует дополнительной работы по инициализации. В последующем обсуждении связанных со спрайтами регистров VIC-II восемь спрайтов соответственно называются спрайтами № 0 - спрайт № 7.
Спрайт включить [ редактировать ]
Каждый бит в адресе 53269 / $ D015 действует как «переключатель», который включает или выключает один из восьми спрайтов; установите бит в «1», чтобы включить соответствующий спрайт. или «0», чтобы скрыть это. Младший значащий бит относится к спрайту № 0, а самый младший бит к спрайту № 7.
генеральный
Для некоторых опций спрайтов, таких как отключение / включение (53269 / $ D015), размер x и y (53277 / $ D01D; 53271 / $ D017) и приоритет фонового спрайта (53275 / $ D01B) или регистры коллизий (53278 / $ D01E) ; 53279 / $ D01F) VIC-II использовал только один регистр для всех спрайтов. В таком случае для каждого спрайта, который использовал эту опцию (бит разрешения для спрайта # 7- # 0), значения битов должны быть суммированы вместе.
Номер спрайта:
# 7 # 6 # 5 # 4 # 3 # 2 # 1 # 0 Значение бита: 128 64 32 16 8 4 2 1
Примеры
Коммутация:
- все спрайты включены - вы устанавливаете сумму битовых значений 255: POKE 53269,255
- только спрайт # 0 (битовое значение 1) на: POKE 53269,1
- только спрайт № 0 (значение бита 1) и № 1 (значение бита 2) на: POKE 53269,3
- только спрайт № 3 (битовое значение 8) и № 5 (битовое значение 32) на: POKE 53269,40
- для всех спрайтов вы устанавливаете значение 0: POKE 53269,0
Спрайтовые указатели [ редактировать ]
Sprite Sprite указатель # 0 2040 / $ 07F8 # 1 2041 / $ 07F9 # 2 2042 / $ 07FA # 3 2043 / $ 07FB # 4 2044 / $ 07FC # 5 2045 / $ 07FD # 6 2046 / $ 07FE # 7 2047 / $ 07 FF
Расположение указателей спрайта совпадает с расположением текстового экрана, так что если VIC-II был «проинформирован» (через адрес 53272 ) что ОЗУ с текстовым экраном начинается с адреса S , указатели спрайтов располагаются по адресам с S +1016 по S +1023. Поскольку адрес ОЗУ на текстовом экране по умолчанию - 1024, указатели спрайтов размещаются по адресам с 2040 (для спрайта # 0) до 2047 (для спрайта # 7) или $ 07F8–07FF в шестнадцатеричный ,
Чтобы заставить данный спрайт показывать шаблон, который хранится в ОЗУ по адресу A (который должен делиться на 64), задайте для содержимого соответствующего адреса указателя спрайта значение A, разделенное на 64. Например, если шаблон спрайта начинается с адреса 704, значение указателя будет 704/64 = 11.
[ редактировать ]
Координата спрайта y координата # 0 53248 / $ D000 53249 / $ D001 # 1 53250 / $ D002 # 2 53252 / $ D004 53253 / $ D005 # 3 53254 / $ D006 53255 / $ D007 # 4 53256 / $ D008 53257 / $ D009 # 5 53258 / $ D00A 53259 / $ D00B # 6 53260 / $ D00C 53261 / $ D00D # 7 53262 / $ D00E 53263 / $ D00F
Каждый спрайт имеет свой собственный набор регистров координат, которые определяют, где на экране появляется спрайт, как указано в таблице справа. Однако спрайты могут перемещаться более чем на 256 пикселей в горизонтальном направлении, и поэтому их координаты x требуют девяти бит; На каждый из указанных адресов доступно более восьми.
Из-за этого адреса координат х, приведенные в таблице, содержат только восемь младших битов координат х для соответствующих спрайтов. Девятый и самый значимый бит для каждого из восьми спрайтов «собраны» в адресе 53264 / $ D010; младший значащий бит здесь соответствует спрайту № 0, а старший значащий бит - спрайту № 7.
Примеры
- Спрайт № 5 должен располагаться на X = 300 (256 + 44).
- Другие спрайты должны оставаться на вашей фактической позиции x.
ОСНОВНОЙ 10 ПОК 53258,44: СПРАВОЧНИК ПОЗИЦИИ X REM # 5 = 44 20 ПОК 53264, PEEK (53264) ИЛИ ЖЕ 32: REM ENABLE EXTRA BIT ДЛЯ SPRITE # 5 Ассемблер LDA # 44 STA $ D00A; X-спрайт № 5 установлен на 44 LDA $ D010; загрузить X-MSB ORA #% 00100000; установить дополнительный бит для спрайта # 5 STA $ D010; написать X-MSB регистр
Высокое разрешение или многоцветный режим [ редактировать ]
В адрес 53276 каждый бит установлен так, чтобы сообщать VIC-II, какие спрайты должны быть в режиме высокого разрешения (бит установлен в «0»), а какие отображаться в многоцветном режиме (бит установлен в «1»). Младший значащий бит управляет спрайтом # 0, а младший значащий бит - спрайтом # 7.
Настройки цвета [ редактировать ]
Все 16 спрайтовых цветов на C64.
Регистр Sprite Color (обычный / одноцветный) # 0 53287 / $ D027 # 1 53288 / $ D028 # 2 53289 / $ D029 # 3 53290 / $ D02A # 4 53291 / $ D02B # 5 53292 / $ D02C # 6 53293 / $ D02D # 7 53294 / $ D02E
Спрайты как многоцветного, так и высокого разрешения имеют один «прозрачный» цвет и один «сплошной» цвет, который можно индивидуально установить для каждого спрайта, используя адреса, указанные в таблице справа.
Помимо этих двух, многоцветный режим предлагает еще два цвета, которые являются общими для всех восьми спрайтов:
- 53285 / $ D025 - это общий цвет, отображаемый для пар битов «01» в данных спрайта, и
- 53286 / $ D026 - это общий цвет, отображаемый для битовых пар «11» в данных спрайта.
Битовая пара Цвет% 00 прозрачность% 10 Цветовой регистр спрайта (обычный / однотонный; $ D027- $ D02E)% 01 Многоцветный регистр # 0 ($ D025)% 11 Многоцветный регистр # 1 ($ D026)
Примеры
Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | (для стандартного или нормального / одноцветного спрайта) | --- | --- | --- | --- | --- | --- | --- | --- | Бит | 7 + 6 | 5 + 4 | 3 + 2 | 1 + 0 | (для многоцветного спрайта) | --- | --- | --- | --- | --- | --- | --- | --- | Битовые значения | 128 | 064 | 032 | 016 | 008 | 004 | 002 | 001 | | --- | --- | --- | --- | --- | --- | --- | --- | 1. Пример | | | | | | | | | (цвет фона), значение 0 | --- | --- | --- | --- | --- | --- | --- | --- | 2. Пример | | X | | X | | X | | X | (многоцветный 0), значение 85 | --- | --- | --- | --- | --- | --- | --- | --- | 3. Пример | X | | X | | X | | X | | (спрайт нормальный / одноцветный), значение 170 | --- | --- | --- | --- | --- | --- | --- | --- | 4. Пример | X | X | X | X | X | X | X | X | (многоцветный 1), значение 255 | --- | --- | --- | --- | --- | --- | --- | --- | В этом примере спрайты и значения данных демонстрируют строку спрайтов! | --- | --- | --- | --- | --- | --- | --- | --- | 5. Пример | X | X | | X | | | X | | значение данных 146 | --- | --- | --- | --- | --- | --- | --- | --- | Все варианты цвета смешаны в спрайт
Двойная высота и / или ширина [ редактировать ]
Спрайт примеры для стандартной высоты, 2 * Y, 2 * X и двойной размер.
По умолчанию, т.е. без использования этой функции, спрайт будет покрывать область шириной 24 (высокое разрешение) и высотой 21 пиксель, но путем установки битов в регистрах 53277 / $ D01D и 53271 / $ D017, каждый спрайт может быть индивидуально «растянут» до двойной ширины и / или двойной высоты. В обоих регистрах младший значащий бит влияет на спрайт № 0, а самый младший бит - на спрайт № 7.
Обратите внимание, что в зависимости от того, был ли спрайт «удвоен» в одном или обоих направлениях, графический шаблон, отображаемый спрайтом, по-прежнему состоит из тех же 63 байтов: расширенный размер достигается за счет более грубой, «блочной» графики.
Примеры
ОСНОВНОЙ 10 ПОК 53277,15: REM SPRITE # 0- # 3 двойной размер в положении x (1 + 2 + 4 + 8 = 15) / спрайт # 4- # 7 стандартный Ассемблер LDA #% 00001111 STA $ D01D; Двойной размер спрайта № 0- № 3 в позиции x / стандарт спрайта № 4- № 7
Приоритет спрайта [ редактировать ]
Спрайт-спрайт - это исправление! Здесь спрайт 0 (белого цвета) всегда находится впереди всех других спрайтов. При использовании разных цветов отображается 3D-эффект.
В контексте спрайтов «фон» относится к текстовому экрану или другой «не спрайтовской» графике, отображаемой на экране вместе со спрайтами: посредством манипулирования битами в адресе 53275 / $ D01B, спрайты могут быть настроены так, чтобы они отображались "позади" (биты установлены в "1") или "перед" (биты установлены в "0") для такой фоновой графики. Младший значащий бит влияет на спрайт № 0, а самый младший бит - на спрайт № 7.
Обратите внимание, что приоритет среди самих спрайтов «зашит»: спрайт с меньшим номером всегда будет перекрываться или появляться «перед» спрайтом с большим номером; например, спрайт # 3 появится перед # 5, если они будут перекрываться.
Бит = 0, спрайт работает правильно.
Бит = 1, спрайт запускается влево.
Примеры
Спрайт № 7 должен появиться спереди - все остальные спрайты № 0-бис-6 не изменены.
БЕЙСИК 10 РОК 53275, ПИК (53275) А ТАКЖЕ 127: REM DISABLE BIT # 7 В ПРИОРИТЕТНОМ РЕГИСТРЕ. Ассемблер LDA $ D01B; регистр приоритета чтения А ТАКЖЕ #% 01111111; отключить Бит 7, Биты № 0- № 6 не изменены STA $ D01B; регистр приоритета записи
Обнаружение столкновения [ редактировать ]
VIC-II обеспечивает аппаратное обнаружение столкновений между спрайтами и другой графикой: «Столкновение» в этом контексте означает, что один или несколько видимых пикселей в одном видимом спрайте фактически перекрывают один или несколько видимых пикселей либо в другом спрайте, либо в фоновой графике. ,
Опрос для столкновений [ редактировать ]
Есть два регистра VIC, которые могут быть опрошенных чтобы увидеть, произошло ли столкновение с участием спрайтов:
- Для спрайтов, участвующих в столкновении с другими спрайтами, их соответствующие биты будут иметь значение «1» в адресе 53278 / $ D01E - у всех остальных спрайтов здесь будет бит «0».
- Спрайты, участвующие в столкновении с фоновой графикой, будут иметь свои соответствующие биты, равные «1» в адресе 53279 / $ D01F - все остальные спрайты сообщат «0».
Как и во всех других регистрах «один бит на спрайт», младший значащий бит влияет на спрайт № 0 и самый младший бит спрайта № 7.
Прерывание при столкновении [ редактировать ]
Оба регистра событий прерывания (по адресу 53273 / $ D019) и регистр разрешения прерываний (по адресу 53274 / $ D01A) есть условия для повышения IRQ -тип прерывания на ЦПУ всякий раз, когда происходят столкновения:
- Бит 2 (вес 4) в обоих регистрах относится к конфликтам между спрайтами и
- Бит 1 (вес 2) в обоих регистрах относится к конфликтам спрайт-фон.
Анимация спрайтов [ редактировать ]
- Для спрайтовой анимации требуются два совпавших изображения (спрайты).
- Блоки спрайтов должны вставляться в порядке воспроизведения в ОЗУ.
- Указатель данных спрайта будет увеличиваться до тех пор, пока не будет достигнут конец анимации, а затем установлен на начальное значение.
Примеры [ редактировать ]
POKE 2040,13: POKE 53248,255: POKE 53249, 100: POKE 53287,1
Включает спрайт № 0 со случайной формой белого цвета.
ПЕЧАТЬ ПИК (53278): ПЕЧАТЬ ПИК (53279)
Считывание битов столкновений спрайтов.
Эта базовая программа демонстрирует несколько вариантов спрайтов из трех спрайтов (многоцветный и стандартный / одноцветный). REM -линии используются только для замечаний (также с помощью команды REM основные строки слишком длинные!). Переменная V содержит начальный адрес VIC-II ,
1 РАСПЕЧАТАТЬ CHR $ (147): V = 53248: POKE V + 33,0: REM очистить экран 2 ЗА Х = 12800 К 12927: POKE X, 0: СЛЕДУЮЩИЙ X: REM Clear RAM для спрайтов 10 FOR X = 12800 - 12881: ЧИТАТЬ Y: POKE X, Y: СЛЕДУЮЩИЙ X: генерация быстрого спрайта 11 POKE 2040,200: POKE 2041,201: POKE 2042,201: POKE V + 21,7 12 POKE V + 28,6: POKE V + 37,15: POKE V + 38,2: REM многоцветная для спрайта 1 и 2 13 POKE V + 39,7: POKE V + 40,8: POKE V + 41,6: цвет спрайта REM спрайта 0 & 1 & 2 15 POKE V + 23,7: POKE V + 29,7: POKE V + 16,1: свойства быстрого спрайта высота, ширина, позиция x 16 POKE V + 1133: POKE V + 2,170: POKE V + 5,115: позиции REM x / y 19 REM перемещение и изменение цветов 20 FOR X = 200 до 1 ШАГ -1: POKE V, X: Z = Z + 0,61: POKE V + 3, Z 21 POKE V + 4, (201-X) / 2: СЛЕДУЮЩИЙ X 22 POKE V + 16,0: POKE V, 255: M = PEEK (V + 4) 23 ДЛЯ X = 255 - 170 ШАГ -1: POKE V, X: Z = Z + 0,66: POKE V + 3, Z 24 POKE V + 4, M + (256-X) /1.2: СЛЕДУЮЩИЙ X 25 ДЛЯ X = 0–5: ДЛЯ Y = 1–255: POKE V + 37 + X, Y: СЛЕДУЮЩИЙ Y, X 26 POKE V + 38,2: POKE V + 39,7: POKE V + 41, 6 27 ДЛЯ Y = 1–65: POKE V + 40, Y: POKE V + 37, Y + 10 28 FOR Z = 0–15: POKE V + 39, Y: NEXT Z, Y 29 REM, ожидание, удаление спрайта 0 и исчезают 30 для X = 0–3000: СЛЕДУЮЩИЙ X 31 ДЛЯ X = 0–32: POKE 12832 + X, 0: POKE 12832-X, 0 32 ДЛЯ Y = 0–100: NEXT Y, X: POKE V + 21,0 39 REM SPRITE C64-WIKI.DE (одноцветный; спрайт 0) 40 ДАННЫЕ 239,81,85,139,81,20,137,81,28,137,81,89,137,213,89,142,85,93,138 41 ДАННЫЕ 95,85,138,91,85,238,91,85,0,038,91,85,0,0 , 0,0 42 ДАННЫЕ 0,199,0,0,231,0,0,164,0,0,180,0,0,151,0,0,180,0,0,164,0,0,231,0,0,199,0 44 REM многоцветные спрайтовые линии (спрайт 1 и 2) 45 ДАННЫЕ 0,255,255,255,170,85,170,170,85,170,85,170,85,85,170,85,255,255,255