Маски камеры в Phaser представляют собой мощный инструмент для управления видимой областью сцены и создания эффектов, таких как затемнение, выделение объектов, динамическая обрезка и сложные визуальные композиции. Маска камеры позволяет ограничить рендеринг объектов только внутри определённой области, не изменяя их реальные координаты или состояния.
В Phaser есть два основных подхода к маскам: геометрические маски и графические маски.
Геометрические маски позволяют использовать простые формы — прямоугольники или другие стандартные фигуры — для ограничения области рендеринга камеры.
Пример создания маски для камеры:
const camera = this.cameras.main;
const maskShape = new Phaser.Geom.Rectangle(100, 50, 400, 300);
camera.setMask(new Phaser.Display.Masks.GeometryMask(this, maskShape));
Особенности геометрических масок:
Phaser.Geom.Rectangle,
Phaser.Geom.Circle или
Phaser.Geom.Ellipse.Phaser.Display.Masks.GeometryMask.Графические маски дают больше свободы и позволяют использовать сложные изображения или динамически изменяемые графические объекты для маскирования камеры.
Пример графической маски:
const graphics = this.add.graphics();
graphics.fillStyle(0xffffff);
graphics.fillCircle(300, 200, 100);
const mask = graphics.createGeometryMask();
this.cameras.main.setMask(mask);
Особенности графических масок:
graphics.createGeometryMask()
или graphics.createBitmapMask().Маска применяется напрямую к объекту камеры с помощью метода
setMask(). После применения все объекты сцены будут
отображаться только в пределах маски.
Пример с анимацией маски:
this.tweens.add({
targets: graphics,
x: 400,
duration: 2000,
yoyo: true,
repeat: -1
});
При этом камера продолжает следить за игроком или другими объектами, но видимая область ограничена движущейся маской.
Phaser поддерживает несколько камер на одной сцене. Каждая камера может иметь собственную маску:
const cam1 = this.cameras.add(0, 0, 400, 300);
const cam2 = this.cameras.add(400, 0, 400, 300);
cam1.setMask(mask1);
cam2.setMask(mask2);
Такой подход позволяет одновременно создавать несколько визуальных окон с разными эффектами, например, мини-карту или динамическое окно наблюдения.
Использование масок может влиять на производительность, особенно графических и анимированных масок. Рекомендуется:
Маски камеры в Phaser обеспечивают гибкость визуализации и контроль над видимой областью, позволяя создавать сложные графические эффекты без изменения логики объектов или сцены.