~1 мин чтения

Камеры

Вьюпорты, прокрутка, масштабирование, следование и эффекты — как Phaser решает, что и где отрисовывать.

Камера — это вьюпорт в мировое пространство сцены. У каждой сцены есть как минимум одна (this.cameras.main); вы можете добавить ещё для разделённого экрана, миникарт и «картинки в картинке».

Мировые против экранных координат

  • Мировые координаты — это место, где живут игровые объекты. Они не меняются при движении камеры.
  • Экранные координаты — это место, куда пиксели попадают на канвас.

Камера отображает одни в другие через scroll, zoom и rotation. Когда нужен оверлей в экранном пространстве (HUD), поместите его в отдельную сцену, камера которой не прокручивается.

Следование за целью

this.cameras.main.startFollow(player, true, 0.1, 0.1);
this.cameras.main.setBounds(0, 0, world.width, world.height);

Коэффициенты линейной интерполяции 0.1 сглаживают следование — 1 означает мгновенно, 0 — никогда не двигается.

Эффекты

Встроенные переходы:

  • shake(duration, intensity) — тряска экрана.
  • flash(duration, r, g, b) — полноэкранная цветовая вспышка.
  • fade(duration, r, g, b) — затухание в цвет.
  • pan(x, y, duration) — перемещение к точке мира.
  • zoomTo(zoom, duration) — анимация масштабирования.

Каждый возвращает похожий на твин дескриптор, который можно объединять в цепочку или ожидать через await посредством события завершения.

Несколько камер

const minimap = this.cameras.add(600, 10, 200, 150)
	.setZoom(0.2)
	.setBackgroundColor(0x002244);
minimap.ignore([hudLayer]); // не отрисовывать HUD на миникарте

Используйте camera.ignore(...), чтобы исключить определённые объекты из определённой камеры.

Связанные темы

  • Сцены — каждой сцене принадлежит свой менеджер камер.
  • Ввод — координаты указателя нужно преобразовать через камеру, чтобы попасть по объектам мира.