В Phaser объект CameraManager управляет всеми
камерами сцены. Каждая сцена содержит по умолчанию одну камеру
(main), но при необходимости можно создавать дополнительные
камеры для разделения игрового пространства, отображения мини-карт или
создания эффектов параллакса. Камеры в Phaser — это объекты класса
Phaser.Cameras.Scene2D.Camera, а менеджер камер
обеспечивает их координацию, обновление и рендеринг.
Ключевыми методами CameraManager являются:
add(x, y, width, height) — создание новой камеры с
указанием позиции и размеров.getCamera(key) — получение камеры по её уникальному
ключу.remove(camera) — удаление камеры из менеджера.main — ссылка на основную камеру сцены.cameras — массив всех камер сцены.Менеджер камер автоматически обновляет все камеры при каждом кадре,
вызывая их методы update и render, что
позволяет изменять положение, масштаб, эффекты и фильтры камер в
реальном времени.
Для создания дополнительной камеры используется метод
add. Например:
const cam1 = this.cameras.add(0, 0, 400, 300);
const cam2 = this.cameras.add(400, 0, 400, 300);
В этом примере сцена делится на две области: левый и правый сегменты экрана. Камеры могут иметь собственные параметры:
scrollX, scrollY — положение камеры в
мире.zoom — уровень масштабирования.rotation — угол поворота камеры.backgroundColor — цвет фона камеры, если объекты сцены
не покрывают всю область.Дополнительно камеры поддерживают маски
(setMask) и фильтры, что позволяет
создавать уникальные визуальные эффекты для каждой камеры.
Камера может следовать за объектом с помощью метода:
cam1.startFollow(player);
Параметры метода startFollow:
lerpX, lerpY — коэффициенты плавного
следования по осям X и Y (значения от 0 до 1).roundPixels — округление позиции камеры для
предотвращения размытия спрайтов.deadzone — область вокруг объекта, при выходе за
которую камера начинает двигаться.Пример настройки deadzone:
cam1.setDeadzone(100, 50);
Камера не будет двигаться, пока игрок остаётся в пределах этой зоны, что создаёт более естественное ощущение движения.
Камеры можно использовать для создания эффектов параллакса, комбинируя несколько слоёв с разными коэффициентами движения. Например:
backgroundLayer.setScrollFactor(0.5);
midgroundLayer.setScrollFactor(0.8);
foregroundLayer.setScrollFactor(1);
Если за этими слоями следит одна камера, объекты будут двигаться с разной скоростью, создавая глубину сцены.
Для изменения масштаба камеры используется метод
setZoom:
cam1.setZoom(2);
Это увеличит все объекты в области камеры в два раза. Масштаб можно
анимировать через tween для плавного эффекта увеличения и
уменьшения.
Камеру можно ограничить границами мира с помощью
setBounds:
cam1.setBounds(0, 0, worldWidth, worldHeight);
Это предотвращает выход камеры за пределы игрового мира. Для нескольких камер можно задавать индивидуальные границы, позволяя, например, мини-карте следовать за игроком только в определённой области.
Phaser камеры поддерживают встроенные эффекты:
fade(duration, red, green, blue) — плавное затемнение
или появление.flash(duration, red, green, blue) — кратковременная
вспышка.shake(duration, intensityX, intensityY) — тряска
камеры.Эти эффекты можно комбинировать для каждой камеры отдельно, создавая динамичные сцены. Например, основная камера может следовать за игроком, а дополнительная — одновременно выполнять shake при столкновении с объектом.
Менеджер камер позволяет легко переключаться между камерами и управлять их видимостью:
cam1.setVisible(true);
cam2.setVisible(false);
Можно также изменять z-order камер, чтобы одна камера накладывалась поверх другой:
cam2.setScroll(0, 0);
cam2.setDepth(1);
Использование нескольких камер позволяет одновременно отображать разные участки сцены, например, для split-screen игр, мини-карт или статистических панелей.
Использование CameraManager в Phaser позволяет создавать сложные визуальные эффекты и гибко управлять представлением сцены, повышая качество и динамику игрового опыта.