В библиотеке Phaser управление камерой является
ключевым элементом при создании динамичных игровых сцен. Для
предотвращения выхода камеры за пределы игрового мира используется метод
setBounds, позволяющий установить границы
её движения. Этот метод применяется к объекту камеры и задаёт
прямоугольную область, в пределах которой камера может перемещаться.
setBoundscamera.setBounds(x, y, width, height);
Параметры:
Все значения задаются в пикселях и обычно соответствуют размерам игрового мира или его активной области.
const config = {
type: Phaser.AUTO,
width: 800,
height: 600,
scene: {
preload: preload,
create: create,
update: update
}
};
const game = new Phaser.Game(config);
function preload() {
this.load.image('background', 'assets/background.png');
this.load.image('player', 'assets/player.png');
}
function create() {
const bg = this.add.image(0, 0, 'background').setOrigin(0, 0);
this.player = this.physics.add.sprite(400, 300, 'player');
this.cameras.main.startFollow(this.player);
this.cameras.main.setBounds(0, 0, bg.width, bg.height);
}
function update() {
const cursors = this.input.keyboard.createCursorKeys();
if (cursors.left.isDown) {
this.player.x -= 5;
} else if (cursors.right.isDown) {
this.player.x += 5;
}
if (cursors.up.isDown) {
this.player.y -= 5;
} else if (cursors.down.isDown) {
this.player.y += 5;
}
}
В этом примере камера следует за игроком, но не
выходит за пределы фона, благодаря setBounds.
startFollowМетод setBounds особенно важен при использовании
camera.startFollow(target), так как без
ограничения камера будет перемещаться вместе с объектом вне видимой
области сцены. setBounds задаёт максимальный прямоугольник,
в котором камера может следовать за объектом.
this.cameras.main.startFollow(this.player);
this.cameras.main.setBounds(0, 0, 2000, 1200);
Здесь камера будет следовать за игроком, но не уйдёт за границы 2000x1200 пикселей.
Phaser поддерживает несколько камер в одной сцене. Каждая камера может иметь свои границы:
const cam1 = this.cameras.add(0, 0, 400, 300);
const cam2 = this.cameras.add(400, 0, 400, 300);
cam1.setBounds(0, 0, 800, 600);
cam2.setBounds(400, 0, 800, 600);
Это позволяет создавать уникальные области обзора для разных частей сцены, например, мини-карты или локальных зон.
setBounds на
эффектыОграничение камеры влияет на многие эффекты Phaser:
Tilemap камеры автоматически ограничиваются размером слоя,
но явное применение setBounds позволяет гибко управлять
областями для UI или отдельных слоев.setBounds,
иначе появятся пустые области.setBounds перед
startFollow, чтобы избежать рывков камеры при
начале слежения.Метод setBounds является мощным
инструментом для точного контроля за поведением камеры, обеспечивая
сохранение визуальной целостности сцены и предотвращая отображение
пустого пространства за пределами игрового мира.