299. Definición de la entrada de sprite
Definir el modelo de datos básico de una entrada de sprite en OAM.
Lección 299 de 356 · tests/chapter_09_sprite_rendering/test_299_sprite_entry_definition.py
Archivo a crear
emulator/rendering/sprite_renderer.pyPor qué existe este paso
OAMDMA ya copia 256 bytes en PPU.oam. Antes de renderizar sprites, necesitamos un pequeño modelo de datos para una entrada de sprite.
¿Qué es OAM? OAM significa Object Attribute Memory. Es la memoria interna de sprites de la PPU:
64 sprites * 4 bytes = 256 bytesCada entrada de sprite usa cuatro bytes
byte 0: Y position
byte 1: tile index
byte 2: attributes
byte 3: X positionEste primer paso de renderizado de sprites solo crea las constantes y la dataclass SpriteEntry. Todavía no decodifica desde OAM ni renderiza píxeles.
Ejemplo de implementación sugerido
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: intConcepto erróneo habitual
"OAMDMA means sprites are visible."No. OAMDMA solo rellena PPU.oam. Renderizar esas entradas como píxeles es un paso posterior del capítulo 09.
Fuera de alcance
- decode_sprite_entry()
- Decodificación de bits de atributos de sprite
- Paletas de sprites
- Renderizado de píxeles
- Sprite 0 hit
- Desbordamiento de sprites
- pygame
Ejecutar esta lección
uv run pytest tests/chapter_09_sprite_rendering/test_299_sprite_entry_definition.py -v