309. Main usa el framebuffer completo
Crear main.py a partir de main_only_background.py y usar Console.render_framebuffer().
Lección 309 de 356 · tests/chapter_09_sprite_rendering/test_309_main_uses_full_framebuffer.py
Archivos involucrados
main_only_background.py
main.pyPor qué existe este paso
main_only_background.py conserva el ejecutor manual anterior que mostraba únicamente el framebuffer de fondo. Para este paso, copiar ese archivo a main.py y luego aplicar allí las modificaciones de renderizado de cuadro completo.
Console ahora expone render_framebuffer(), que devuelve fondo + sprites en un solo Framebuffer puro. El nuevo main.py debería usar esa ruta de renderizado de cuadro completo en lugar del helper anterior solo de fondo.
El archivo plantilla, main_only_background.py, muestra:
console.render_background_framebuffer()Tras copiarlo a main.py y aplicar este paso, main.py muestra:
console.render_framebuffer()Esto permite que el ejecutor manual de pygame muestre sprites como Mario/enemigos/objetos cuando el estado actual de la PPU contiene datos válidos de OAM, CHR y paleta de sprites.
Flujo de implementación sugerido
cp main_only_background.py main.pyLuego actualizar main.py para que esta línea:
framebuffer = console.render_background_framebuffer()se convierta en:
framebuffer = console.render_framebuffer()Hacer esto tanto antes de crear la ventana de pygame como después de cada paso de cuadro.
Regla importante de preservación
No eliminar main_only_background.py. Los tests anteriores del tutorial lo usan como punto de control histórico estable del ejecutor solo de fondo.
Limitación visual conocida
Los sprites pueden aparecer incorrectamente delante de tuberías/tubos. Esto es esperable por ahora porque el bit 5 de prioridad sprite/fondo se decodifica pero aún no se aplica. El siguiente trabajo planificado es una máscara de opacidad de fondo y composición con prioridad.
Comando manual
uv run python main.pyComportamiento manual esperado
La ventana de pygame debería seguir mostrando el fondo, y los sprites deberían aparecer ahora. La prioridad visual puede seguir siendo incorrecta. El rendimiento puede seguir siendo lento porque el helper de dibujo actual de pygame es intencionadamente simple.
Fuera del alcance
- máscara de opacidad de fondo
- comportamiento de prioridad sprite/fondo
- sprite 0 hit
- sprite overflow
- optimización rápida de subida de framebuffer
- llamar a main() desde pytest
Ejecutar esta lección
uv run pytest tests/chapter_09_sprite_rendering/test_309_main_uses_full_framebuffer.py -v