NES TDD

302. Декодирование атрибутов спрайта

Декодировать исходный байт атрибутов спрайта.

Урок 302 из 356 · tests/chapter_09_sprite_rendering/test_302_decode_sprite_attributes.py

Изменяемый файл

emulator/rendering/sprite_renderer.py

Зачем нужен этот шаг

Предыдущий шаг определил SpriteAttributes. Теперь мы преобразуем исходный байт атрибутов OAM в эту декодированную структуру.

Предлагаемый пример реализации

def decode_sprite_attributes(attributes: int) -> SpriteAttributes:
    attributes &= 0xFF

    return SpriteAttributes(
        palette_id=attributes & SPRITE_PALETTE_ID_MASK,
        is_behind_background=(attributes & SPRITE_IS_BEHIND_BACKGROUND) != 0,
        flip_horizontal=(attributes & SPRITE_FLIP_HORIZONTAL) != 0,
        flip_vertical=(attributes & SPRITE_FLIP_VERTICAL) != 0,
    )

Пример

attributes = 0b1110_0011

Значение

palette_id = 3
is_behind_background = True
flip_horizontal = True
flip_vertical = True

Биты 2-4

Пока игнорируются. Не выбрасывайте исключение, если они установлены.

Вне рамок этого шага

  • вспомогательная функция для палитровой RAM спрайтов
  • отрисовка пикселей
  • попадание спрайта 0
  • переполнение спрайтов
  • pygame

Запустить этот урок

uv run pytest tests/chapter_09_sprite_rendering/test_302_decode_sprite_attributes.py -v