В библиотеке 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 предоставляет встроенные методы для динамичных эффектов камеры:
camera.pan(400, 300, 2000, 'Power2'); // перемещает камеру к (400, 300) за 2 секунды
camera.shake(500, 0.02); // трясет камеру 0.5 секунды с интенсивностью 0.02
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 позволяет создать богатую визуальную динамику, управлять видимым пространством и эффективно интегрировать эффекты, обеспечивая высокое качество игрового опыта.