Подключаем Console.render_framebuffer() к передаче маски непрозрачности фона.
Урок 314 из 356 · tests/chapter_09_sprite_rendering/test_314_console_passes_background_opaque_mask.py
Файл для обновления
emulator/console.py
Зачем нужен этот шаг
Рендерер спрайтов теперь может применять бит 5 приоритета спрайтов при получении BackgroundOpaqueMask. Шаг 313 добавил вспомогательную функцию уровня PPU:
ppu_background_to_opaque_mask(ppu)
Этот шаг подключает эту функцию к пути рендеринга полного кадра.
from emulator.rendering.ppu_background_renderer import (
ppu_background_to_framebuffer,
# --- ADD THIS NEW IMPORT ---
ppu_background_to_opaque_mask,
PATTERN_TABLE_0_ADDR,
PATTERN_TABLE_1_ADDR,
)
defrender_framebuffer(self) -> Framebuffer:
background = self.render_background_framebuffer()
# --- ADD THIS NEW LINE ---
background_opaque_mask = ppu_background_to_opaque_mask(self.ppu)
...
return composite_background_and_sprites(
background=background,
oam=self.ppu.oam,
pattern_table=pattern_table,
sprite_palettes=sprite_palettes,
# --- ADD THIS NEW LINE ---
background_opaque_mask=background_opaque_mask,
)
Важная граница
Console должен оркестрировать вспомогательные функции. Он не должен дублировать извлечение nametable/таблицы паттернов фона, которое относится к ppu_background_renderer.py.
Вне рамок
добавление ещё одного алгоритма маски фона
изменение ppu_background_to_opaque_mask()
sprite 0 hit
переполнение спрайтов
pygame
Запустить этот урок
uv run pytest tests/chapter_09_sprite_rendering/test_314_console_passes_background_opaque_mask.py -v