Phaser — это мощная библиотека для создания 2D-игр на JavaScript, где управление размером и масштабированием объектов играет ключевую роль для корректного отображения сцены на различных устройствах. Основными объектами для работы с размерами являются игровая сцена, спрайты, текстовые объекты, изображения и контейнеры.
Размер сцены задается при создании нового экземпляра игры через конфигурацию:
const config = {
type: Phaser.AUTO,
width: 800,
height: 600,
scene: {
preload: preload,
create: create,
update: update
}
};
const game = new Phaser.Game(config);
Параметры width и height определяют
внутренние размеры канваса, а масштабирование всего игрового
пространства регулируется через объект scale:
scale: {
mode: Phaser.Scale.FIT,
autoCenter: Phaser.Scale.CENTER_BOTH
}
Phaser поддерживает несколько режимов масштабирования, каждый из которых влияет на то, как игра адаптируется к экрану:
Пример настройки:
const config = {
type: Phaser.AUTO,
width: 1024,
height: 768,
scale: {
mode: Phaser.Scale.FIT,
autoCenter: Phaser.Scale.CENTER_BOTH
},
scene: [MainScene]
};
Каждый объект в Phaser имеет свойства scaleX и
scaleY, а также удобный метод setScale()
для однотипного масштабирования по обеим осям:
let sprite = this.add.sprite(400, 300, 'player');
sprite.setScale(2); // увеличивает спрайт в 2 раза по X и Y
sprite.setScale(1, 0.5); // растягивает по X и сжимает по Y
Можно также использовать свойства displayWidth и
displayHeight для задания точного размера объекта без
влияния на его исходные размеры текстуры:
sprite.displayWidth = 100;
sprite.displayHeight = 150;
При работе с анимациями важно учитывать origin —
точку привязки спрайта, задаваемую методом setOrigin(x, y).
Она влияет на поведение при масштабировании и вращении.
sprite.setOrigin(0.5, 0.5); // центр спрайта
sprite.setOrigin(0, 0); // левый верхний угол
Текстовые объекты управляются через стиль fontSize и
свойства масштаба:
let text = this.add.text(400, 300, 'Phaser', { fontSize: '32px', color: '#ffffff' });
text.setScale(1.5); // увеличивает текст
Важно помнить, что увеличение масштаба может привести к размытию
текста на некоторых устройствах, поэтому часто лучше увеличивать
fontSize, а не использовать setScale.
Phaser предоставляет Container для объединения нескольких объектов в один. Масштабирование контейнера влияет на все его дочерние элементы:
let container = this.add.container(200, 200);
container.add([sprite, text]);
container.setScale(1.5); // масштабирование всех объектов внутри
Это удобно для создания составных объектов, UI-элементов или игровых платформ с несколькими частями.
Для корректного отображения на устройствах с разными плотностями пикселей необходимо учитывать devicePixelRatio. Phaser автоматически масштабирует canvas через конфигурацию:
render: {
pixelArt: true, // предотвращает размывание пиксельной графики
antialias: false
}
Pixel-art графика особенно чувствительна к масштабированию, поэтому
рекомендуется использовать pixelArt: true и избегать
дробного масштабирования.
Phaser позволяет изменять масштаб сцены и объектов в процессе игры
через scale и методы объектов:
this.scale.resize(newWidth, newHeight);
sprite.setScale(sprite.scaleX * 1.1);
Это полезно для эффектов зума, увеличения UI-элементов или адаптации под изменение размеров окна браузера.
width, height,
scale.mode, scale.autoCenter.setScale,
scaleX, scaleY, displayWidth,
displayHeight, origin.fontSize для
четкости, setScale для визуальных эффектов.pixelArt: true
и избегать дробного масштабирования.FIT,
ENVELOP, RESIZE и центрирование обеспечивают
корректное отображение на всех устройствах.Правильное использование этих инструментов позволяет создавать игры с гибким и предсказуемым поведением объектов на любых экранах, сохраняя пропорции, четкость графики и управляемость сцены.