В Phaser управление размерами и масштабированием визуальных объектов играет ключевую роль при создании адаптивных сцен. Библиотека предоставляет мощный инструмент для настройки размеров через режимы масштабирования, позволяя точно контролировать, как объект вписывается в область отображения. Рассмотрим пять основных режимов: FIT, ENVELOP, WIDTH_CONTROLS_HEIGHT, HEIGHT_CONTROLS_WIDTH и NONE.
Режим FIT обеспечивает пропорциональное масштабирование объекта таким образом, чтобы он полностью помещался в заданный контейнер или область. При этом сохраняется исходное соотношение сторон. Если размеры контейнера не совпадают с пропорциями объекта, появляются свободные области по вертикали или горизонтали.
Пример применения:
const image = this.add.image(0, 0, 'sprite');
this.scale.fit(image, { width: 800, height: 600 });
Ключевые моменты FIT:
Этот режим идеально подходит для адаптивного размещения изображений на экранах с различным разрешением без искажения.
Режим ENVELOP масштабирует объект так, чтобы он полностью заполнял контейнер, сохраняя при этом пропорции. В отличие от FIT, здесь объект может выходить за границы контейнера, чтобы не оставалось пустых областей.
Пример применения:
const sprite = this.add.sprite(0, 0, 'background');
this.scale.envelop(sprite, { width: 1024, height: 768 });
Особенности ENVELOP:
Подходит для фоновых изображений, где критично отсутствие пустых областей и незначительное обрезание краев допустимо.
Режим WIDTH_CONTROLS_HEIGHT задаёт ширину объекта и автоматически вычисляет высоту, исходя из пропорций. В этом случае изменение ширины полностью определяет высоту.
Пример применения:
const button = this.add.image(0, 0, 'button');
this.scale.widthControlsHeight(button, 300);
Особенности WIDTH_CONTROLS_HEIGHT:
Режим удобен для интерфейсных элементов, которые должны соответствовать заданной ширине, например, кнопок или панелей инструментов.
Режим HEIGHT_CONTROLS_WIDTH обратен предыдущему. Задаётся фиксированная высота, а ширина вычисляется автоматически, сохраняя пропорции объекта.
Пример применения:
const panel = this.add.image(0, 0, 'panel');
this.scale.heightControlsWidth(panel, 200);
Особенности HEIGHT_CONTROLS_WIDTH:
Этот режим позволяет управлять вертикальной компоновкой сцены без деформации объектов.
Режим NONE отключает автоматическое масштабирование.
Размер объекта остаётся таким, какой был задан в ресурсах. Все изменения
размеров должны выполняться вручную через свойства scaleX и
scaleY или методы setDisplaySize.
Пример применения:
const logo = this.add.image(0, 0, 'logo');
logo.setDisplaySize(150, 100); // ручная настройка
Особенности NONE:
Режим NONE необходим в ситуациях, где автоматическое масштабирование может нарушить визуальный стиль или геймплейный дизайн.
setOrigin,
setDisplaySize и setScale позволяет создавать
гибкие и масштабируемые сцены, адаптированные под разные разрешения
экранов.Эффективное использование этих режимов обеспечивает правильное отображение объектов на всех устройствах и минимизирует искажения при изменении размеров сцены.