301. Definición de atributos de sprite
Definir el modelo de datos de atributos de sprite.
Lección 301 de 356 · tests/chapter_09_sprite_rendering/test_301_sprite_attribute_definition.py
Archivo a actualizar
emulator/rendering/sprite_renderer.pyPor qué existe este paso
Cada SpriteEntry contiene un byte de atributos en crudo. Antes de renderizar sprites, necesitamos nombres para los bits relevantes y una pequeña dataclass para el significado decodificado.
Byte de atributos de sprite en la NES
bits 0-1: sprite palette ID
bits 2-4: unused / ignored for now
bit 5: priority behind background
bit 6: horizontal flip
bit 7: vertical flipEjemplo de implementación sugerido
SPRITE_PALETTE_ID_MASK = 0b0000_0011
SPRITE_IS_BEHIND_BACKGROUND = 1 << 5
SPRITE_FLIP_HORIZONTAL = 1 << 6
SPRITE_FLIP_VERTICAL = 1 << 7
@dataclass(frozen=True)
class SpriteAttributes:
palette_id: int
is_behind_background: bool
flip_horizontal: bool
flip_vertical: boolConcepto erróneo frecuente
"Sprite attributes are the same as background attribute table bytes."No. Los bytes de la tabla de atributos del fondo seleccionan paletas de fondo para regiones de tiles. Los atributos de sprite son por sprite y residen en el byte 2 de OAM.
Fuera del alcance
- decode_sprite_attributes()
- helper de paleta de sprite en RAM
- renderizado de píxeles
- sprite 0 hit
- sprite overflow
- pygame
Ejecutar esta lección
uv run pytest tests/chapter_09_sprite_rendering/test_301_sprite_attribute_definition.py -v