Глава 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 — поверх всего
Порядок — линейный список, а не случайное совпадение
Раздел 20.13 (мобильный опыт) и раздел 21.12 уже подчёркивали: интерфейс не должен теряться под игровыми объектами. Раздел HUD и оверлей рисуются здесь последними именно поэтому — они физически не могут оказаться под врагом или взрывом.