Основная камера сцены

В библиотеке Phaser основная камера сцены (Main Camera) отвечает за отображение игрового мира на экране и управление его видимой областью. Камера позволяет масштабировать, перемещать и вращать сцену, создавая динамические эффекты, такие как скроллинг, следование за игроком или зумирование. Каждая сцена Phaser по умолчанию имеет одну камеру, доступную через свойство this.cameras.main.

Создание и доступ к основной камере

Основная камера автоматически создается при инициализации сцены. Доступ к ней осуществляется через:

const camera = this.cameras.main;

Эта камера наследует все методы и свойства объекта Phaser.Cameras.Scene2D.Camera.

Настройка позиции и размеров

Камера имеет координаты верхнего левого угла (x, y) и размеры (width, height), которые определяют видимую область. Для изменения позиции камеры используется:

camera.setBounds(0, 0, worldWidth, worldHeight);
camera.setScroll(100, 50); // перемещает камеру к координатам (100, 50)

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

Масштабирование и зум

Масштабирование сцены выполняется с помощью свойства zoom:

camera.setZoom(2); // увеличивает сцену в 2 раза
camera.setZoom(1); // возвращает исходный масштаб

При использовании зума важно помнить, что координаты объектов остаются прежними, изменяется лишь видимая часть и масштаб отображения.

Следование за объектом

Функция startFollow позволяет камере автоматически следовать за спрайтом или другим объектом:

camera.startFollow(player, true, 0.1, 0.1);

Параметры сглаживания (lerpX и lerpY) задают плавность движения камеры при следовании. Без сглаживания камера мгновенно перемещается к позиции объекта, с параметрами 0 < lerp <= 1 движение становится более плавным.

Ограничения перемещения камеры

Чтобы камера не выходила за пределы игрового мира, используется:

camera.setBounds(0, 0, worldWidth, worldHeight);

Для более сложных эффектов можно применять deadzone — область, в которой объект может двигаться без перемещения камеры:

camera.setDeadzone(150, 100); // камера не двигается, пока объект в пределах этой области

Эффекты камеры

Phaser предоставляет встроенные методы для динамичных эффектов камеры:

  • Панорамирование (pan) — плавное перемещение камеры к заданной точке:
camera.pan(400, 300, 2000, 'Power2'); // перемещает камеру к (400, 300) за 2 секунды
  • Шейк (shake) — кратковременная тряска камеры для эффектов удара:
camera.shake(500, 0.02); // трясет камеру 0.5 секунды с интенсивностью 0.02
  • Фейд (fade) — постепенное затемнение или появление сцены:
camera.fadeOut(1000, 0, 0, 0); // затемнение за 1 секунду
camera.fadeIn(1000, 255, 255, 255); // плавное появление

Эти эффекты могут быть связаны с событиями сцены и синхронизированы с анимацией или игровыми событиями.

Применение масок и слоёв

Камера может работать с масками, скрывая часть сцены:

const shape = this.add.rectangle(400, 300, 200, 200, 0xffffff);
const mask = shape.createGeometryMask();
camera.setMask(mask);

Также можно использовать несколько камер, каждая из которых отображает разные слои сцены, создавая эффект мини-карт или интерфейсов поверх основной сцены.

Взаимодействие с пользовательским вводом

Камера может реагировать на ввод, например, скроллинг мышью или жесты:

this.input.on('wheel', (pointer, gameObjects, deltaX, deltaY, deltaZ) => {
    camera.scrollX += deltaY;
});

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

Итоговые свойства и методы

Основные свойства и методы камеры:

  • scrollX, scrollY — текущая позиция камеры;
  • width, height — размеры видимой области;
  • zoom — масштаб сцены;
  • startFollow(target, roundPixels, lerpX, lerpY) — следование за объектом;
  • setBounds(x, y, width, height) — границы движения камеры;
  • setDeadzone(width, height) — зона, внутри которой камера не двигается;
  • shake(duration, intensity) — тряска камеры;
  • fadeIn(duration, r, g, b) / fadeOut(duration, r, g, b) — эффекты плавного появления и исчезновения;
  • pan(x, y, duration, ease) — плавное перемещение камеры.

Использование основной камеры сцены в Phaser позволяет создать богатую визуальную динамику, управлять видимым пространством и эффективно интегрировать эффекты, обеспечивая высокое качество игрового опыта.