В библиотеке Phaser масштабирование объектов является ключевым инструментом для управления визуальным представлением спрайтов, текстов и других игровых элементов. Масштаб позволяет изменять размеры объектов без необходимости модифицировать исходные текстуры, что удобно для адаптации интерфейса под разные разрешения и создания динамических эффектов.
scaleX и
scaleYКаждый объект в Phaser, который наследует от GameObject,
обладает свойствами scaleX и scaleY. Они
определяют коэффициенты масштабирования по горизонтали и вертикали
соответственно.
По умолчанию оба значения равны 1, что соответствует
исходному размеру объекта.
Пример изменения масштаба спрайта:
let player = this.add.sprite(400, 300, 'player');
// Увеличение ширины в 2 раза
player.scaleX = 2;
// Уменьшение высоты в 0.5 раза
player.scaleY = 0.5;
При отрицательных значениях scaleX или
scaleY объект инвертируется по соответствующей оси. Это
часто используется для зеркального отображения спрайтов, например, при
смене направления движения персонажа.
// Зеркальное отражение спрайта по горизонтали
player.scaleX = -1;
setScaleМетод setScale обеспечивает более удобный способ
управления масштабом, объединяя оба направления в один вызов и позволяя
задавать одинаковый или различный коэффициент для осей X и Y.
Сигнатуры метода:
setScale(scale: number) — одинаковый коэффициент для
обеих осей.setScale(scaleX: number, scaleY: number) — разные
коэффициенты для X и Y.Пример использования:
let enemy = this.add.sprite(200, 200, 'enemy');
// Пропорциональное масштабирование
enemy.setScale(1.5);
// Разное масштабирование по осям
enemy.setScale(2, 0.8);
Метод setScale также возвращает сам объект, что
позволяет использовать цепочку вызовов (chaining):
enemy.setScale(1.2).setAlpha(0.8).setTint(0xff0000);
Точка якоря (origin) объекта в Phaser задаёт точку, вокруг которой
выполняются трансформации: масштабирование, вращение и смещение. По
умолчанию origin равен (0.5, 0.5), то есть центр
объекта.
// Установка точки якоря в левый верхний угол
player.setOrigin(0, 0);
// Масштабирование будет происходить относительно верхнего левого угла
player.setScale(2);
Изменение origin позволяет точно контролировать, где объект «растет» при масштабировании, что важно для UI-элементов или анимации, где требуется смещение от конкретной точки.
Текстовые объекты Phaser (Phaser.GameObjects.Text) также
поддерживают scaleX, scaleY и
setScale. Это позволяет динамически изменять размер шрифта
без пересоздания объекта:
let scoreText = this.add.text(50, 50, 'Score: 0', { fontSize: '32px', color: '#fff' });
// Увеличение размера текста в 1.5 раза
scoreText.setScale(1.5);
При этом свойства fontSize остаются прежними, а
визуальный размер текста изменяется пропорционально масштабу.
Масштабирование часто используется в анимации через tweens:
this.tweens.add({
targets: player,
scaleX: 1.5,
scaleY: 1.5,
duration: 500,
yoyo: true,
repeat: -1,
ease: 'Sine.easeInOut'
});
В этом примере объект плавно увеличивается и возвращается к исходному
размеру, создавая эффект «пульсации». Использование tweens с
scaleX и scaleY позволяет реализовать сложные
визуальные эффекты без изменения текстур.
Масштабирование напрямую влияет на свойства displayWidth
и displayHeight, которые отражают реальные размеры объекта
на экране с учётом масштаба:
console.log(player.displayWidth); // исходная ширина * scaleX
console.log(player.displayHeight); // исходная высота * scaleY
Это особенно полезно при коллизиях или позиционировании относительно других объектов.
scaleX и scaleY или один аргумент
setScale.scaleX или
scaleY.update.Масштабирование в Phaser — это гибкий инструмент для управления визуальными характеристиками объектов, обеспечивающий простое и мощное управление размерами, пропорциями и эффектами без модификации исходных ресурсов.