Phaser предоставляет гибкую систему управления масштабированием игр через объект ScaleManager, который отвечает за отображение игрового канваса в различных условиях экранов и устройств. Правильная настройка масштабирования критична для обеспечения корректного отображения контента на разных разрешениях, соотношениях сторон и при изменении размера окна браузера.
ScaleManager в Phaser 3 поддерживает несколько
режимов масштабирования, определяемых свойством mode. Эти
режимы определяют поведение игрового канваса относительно размера окна
или контейнера:
NONE Игровой канвас не масштабируется.
this.scale.mode = Phaser.Scale.NONE;FIT Канвас масштабируется так, чтобы полностью вписываться в доступное пространство, сохраняя исходное соотношение сторон.
this.scale.mode = Phaser.Scale.FIT;
this.scale.updateBounds();ENVELOP (иногда используется как ZOOM) Канвас масштабируется до полного заполнения контейнера, может обрезать часть контента для сохранения соотношения сторон.
this.scale.mode = Phaser.Scale.ENVELOP;RESIZE Игровой канвас изменяет размеры в соответствии с изменением контейнера или окна.
this.scale.mode = Phaser.Scale.RESIZE;ScaleManager позволяет управлять ориентацией игры и автоматическим масштабированием:
Ограничение ориентации
this.scale.orientation = Phaser.Scale.LANDSCAPE; // Или PORTRAIT
this.scale.lockOrientation();
При этом при неверной ориентации можно показывать пользователю подсказку сменить положение устройства.
Автоматическое центрирование канваса
this.scale.pageAlignHorizontally = true;
this.scale.pageAlignVertically = true;
Позволяет автоматически центрировать игру на странице или внутри контейнера.
ScaleManager генерирует события, которые помогают реагировать на изменение размеров или ориентации:
resize — срабатывает при изменении размера
канваса.orientationchange — при смене ориентации
устройства.Пример использования события resize для адаптации
элементов интерфейса:
this.scale.on('resize', (gameSize, baseSize, displaySize, resolution) => {
console.log('Новый размер игры:', gameSize.width, gameSize.height);
this.cameras.resize(gameSize.width, gameSize.height);
});
width и height — текущие размеры игрового
канваса.parent — контейнер DOM, в котором размещается
игра.fullScreenTarget — элемент, который разворачивается в
полноэкранный режим.updateBounds() — пересчитывает размеры канваса после
изменения контейнера или режима.startFullscreen() и stopFullscreen() —
управление полноэкранным режимом через браузерные API.resize, чтобы интерфейс оставался корректным при смене
ориентации.fullScreenTarget и проверять поддержку API браузером.Эффективное использование ScaleManager позволяет создавать игры, которые одинаково корректно отображаются на широком спектре устройств, обеспечивая удобный контроль над размером канваса, пропорциями и позиционированием контента.