TileSprite в Phaser — это специализированный спрайт, текстура которого автоматически повторяется по горизонтали и вертикали, создавая бесшовный фон или эффект движения. Он позволяет экономить ресурсы, так как используется один небольшой фрагмент изображения вместо многократного размещения одинаковых объектов на сцене.
Создание TileSprite производится с использованием метода
this.add.tileSprite внутри сцены:
const tile = this.add.tileSprite(x, y, width, height, 'textureKey');
Параметры:
x и y — координаты центра TileSprite.width и height — размеры области, которую
занимает TileSprite.textureKey — ключ загруженной текстуры, используемой
для повторения.Например:
this.load.image('ground', 'assets/ground.png');
const ground = this.add.tileSprite(400, 300, 800, 600, 'ground');
В этом примере текстура ground.png будет повторяться по
всей области 800x600 пикселей.
1. tilePositionX и tilePositionY Эти свойства отвечают за смещение текстуры внутри TileSprite. Изменение значений позволяет создавать эффект движения фона:
ground.tilePositionX += 2;
ground.tilePositionY += 1;
2. tileScaleX и tileScaleY Позволяют масштабировать повторяющуюся текстуру, не изменяя размер самого TileSprite:
ground.tileScaleX = 2; // текстура будет повторяться с увеличением в 2 раза
ground.tileScaleY = 0.5; // по вертикали уменьшение в 2 раза
3. setOrigin(x, y) TileSprite наследует стандартные свойства спрайта. Изменение точки привязки влияет на позиционирование:
ground.setOrigin(0, 0);
TileSprite широко используется для создания
параллакса или бесконечно движущихся
фонов. Основная идея — изменять tilePositionX или
tilePositionY в методе update:
update() {
ground.tilePositionX -= 3; // движение фона влево
}
Для создания сложного параллакса можно использовать несколько TileSprite с разной скоростью смещения:
this.backgroundFar = this.add.tileSprite(400, 300, 800, 600, 'sky');
this.backgroundNear = this.add.tileSprite(400, 300, 800, 600, 'mountains');
update() {
this.backgroundFar.tilePositionX -= 0.5;
this.backgroundNear.tilePositionX -= 2;
}
TileSprite не поддерживает физические коллайдеры для повторяющихся текстур напрямую, так как это просто графический элемент. Для взаимодействия с объектами нужно создавать отдельные невидимые физические объекты (например, статические спрайты или тайлы) и синхронизировать их с TileSprite визуально.
1. Фоны и уровни TileSprite идеально подходит для создания бесконечных фоновых текстур, например, земли, воды, облаков или звездного неба.
2. Параллакс-эффекты Разделение сцен на несколько слоев с разной скоростью смещения усиливает ощущение глубины.
3. Паттерны и интерфейс Можно использовать TileSprite для динамически повторяющихся UI-элементов, таких как полосы загрузки или текстурированные панели.
tilePosition в
методе update, избегая изменения самого спрайта
(x, y), так как это более ресурсоёмко.Прокрутка фона с ускорением:
let speed = 2;
update() {
speed += 0.01; // ускорение
ground.tilePositionX -= speed;
}
Динамическая смена текстуры:
ground.setTexture('newTexture');
ground.tileScaleX = 1.5;
TileSprite обеспечивает гибкость в работе с графикой, позволяя создавать визуально насыщенные сцены без чрезмерного расхода ресурсов. Его использование в Phaser является стандартной практикой при работе с повторяющимися или движущимися фоновыми элементами.