299. Определение записи спрайта
Определение базовой модели данных записи спрайта OAM.
Урок 299 из 356 · tests/chapter_09_sprite_rendering/test_299_sprite_entry_definition.py
Файл для создания
emulator/rendering/sprite_renderer.pyЗачем нужен этот шаг
OAMDMA уже копирует 256 байт в PPU.oam. Прежде чем рендерить спрайты, нужна небольшая модель данных для одной записи спрайта.
Что такое OAM? OAM означает Object Attribute Memory. Это внутренняя память спрайтов PPU:
64 sprites * 4 bytes = 256 bytesКаждая запись спрайта занимает четыре байта
byte 0: Y position
byte 1: tile index
byte 2: attributes
byte 3: X positionЭтот первый шаг рендеринга спрайтов только создаёт константы и датакласс SpriteEntry. Он ещё не декодирует данные из OAM и не рендерит пиксели.
Пример предполагаемой реализации
from dataclasses import dataclass
OAM_SPRITE_COUNT = 64
BYTES_PER_SPRITE = 4
OAM_SIZE = OAM_SPRITE_COUNT * BYTES_PER_SPRITE
@dataclass(frozen=True)
class SpriteEntry:
y: int
tile_index: int
attributes: int
x: intРаспространённое заблуждение
"OAMDMA means sprites are visible."Нет. OAMDMA лишь заполняет PPU.oam. Рендеринг этих записей в пиксели — это более поздний шаг главы 09.
Вне рамок этого шага
- decode_sprite_entry()
- декодирование битов атрибутов спрайта
- палитры спрайтов
- рендеринг пикселей
- sprite 0 hit
- переполнение спрайтов
- pygame
Запустить этот урок
uv run pytest tests/chapter_09_sprite_rendering/test_299_sprite_entry_definition.py -v