Игровое поле и интерфейс игрока
Счёт и жизни живут в своей полосе сверху — игровые объекты в неё физически не заходят.
Глава 19 уже показывала, что бывает, если интерфейс перекрывает игровое поле: важный текст может оказаться под движущимся объектом. Финальная версия шутера с самого начала разделяет экран на две чётко разные области: игровое поле и полосу с показаниями для игрока — счётом, жизнями, номером волны. Такую полосу поверх игрового мира в индустрии принято называть HUD (Heads-Up Display, «приборная панель» — интерфейс, который не является частью самой игры, а просто показывает её текущее состояние).
HUD_HEIGHT = 64
self.playfield = pygame.Rect(0, HUD_HEIGHT, SHIRINA, VYSOTA - HUD_HEIGHT)
Игровое поле — обычный Rect, а не просто число отступа: у него
сразу есть .top, .bottom,
.left, .right — то же самое, что
возвращает korabl.top в разделе 21.2, только теперь описывает не
один объект, а всю разрешённую область движения.
| Что где происходит | Область |
|---|---|
| Счёт, жизни, волна | HUD-полоса (0 — HUD_HEIGHT) |
| Корабль, враги, пули, взрывы | Игровое поле (HUD_HEIGHT — низ экрана) |
| Появление врагов | Чуть выше верхней границы игрового поля |
| Побег врага (раздел 21.16) | Пересечение нижней границы игрового поля |
Player.move() (раздел 21.11) зажимает позицию в границах self.playfield, а не всего окна SHIRINA × VYSOTA — иначе корабль мог бы заехать под HUD и спрятать сам себя за текстом счёта.