Глава 21 · Проект: космический шутер

Звёздный фон и порядок отрисовки

Процедурные звёзды вместо готового изображения — и явный порядок слоёв, чтобы HUD всегда оставался поверх.

Последний штрих атмосферы — звёздный фон. Вместо готового изображения звёзды рисуются процедурно: список маленьких точек с собственной скоростью и цветом, каждая из которых зацикливается сверху вниз.

fragment_stars.py
def _update_stars(self, dt):
    for star in self.stars:
        star.y += star.speed * dt
        if star.y > self.playfield.bottom:
            star.y = self.playfield.top
            star.x = self.rng.uniform(0, SHIRINA)

У разных звёзд — разная скорость (от 20 до 90 px/s), поэтому они создают лёгкое ощущение глубины: быстрые точки ближе, медленные — дальше, тот же зрительный приём, что параллакс в более сложных играх, только без отдельных слоёв.

Порядок отрисовки решает, что оказывается «поверх»

Фон и звёзды
screen.fill(...)
_render_stars()
Враги
self.enemies.draw(screen)
Пули
self.bullets.draw(screen)
Корабль игрока
screen.blit(player.image, player.rect)
Взрывы
self.explosions.draw(screen)
HUD
счёт, жизни, волна — своя полоса сверху
Оверлей состояния
меню / пауза / Game Over — поверх всего
Каждый следующий слой рисуется поверх предыдущего — HUD и оверлей состояния всегда видны, что бы ни происходило на игровом поле.
Порядок — линейный список, а не случайное совпадение
Раздел 20.13 (мобильный опыт) и раздел 21.12 уже подчёркивали: интерфейс не должен теряться под игровыми объектами. Раздел HUD и оверлей рисуются здесь последними именно поэтому — они физически не могут оказаться под врагом или взрывом.