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.py

Por 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.py

Luego 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.py

Comportamiento 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