В библиотеке Phaser для работы с игровыми спрайтами и анимациями используется понятие фреймов. Фрейм — это отдельное изображение из спрайт-листа (spritesheet) или атласа текстур, которое может быть отображено в игре как самостоятельный объект. Управление фреймами включает не только выбор нужного кадра, но и точную настройку его границ и отступов.
Спрайт-лист — это одно изображение, содержащее несколько фреймов, расположенных в сетке. Для работы с ними необходимо указать параметры: ширину и высоту каждого кадра, количество фреймов и возможные отступы между ними.
this.load.spritesheet('player', 'assets/player.png', {
frameWidth: 32,
frameHeight: 48,
margin: 2,
spacing: 4
});
frameWidth и frameHeight — размеры
кадра.margin — отступ от края изображения до первого
фрейма. Часто применяется, если текстура имеет рамку.spacing — расстояние между соседними
кадрами. Используется для корректного извлечения фреймов без
наложения соседних изображений.Правильная настройка этих параметров критична для того, чтобы анимация отображалась корректно, без “залипания” или наложения кадров.
Phaser позволяет программно обрезать фрейм внутри спрайта. Это полезно для создания динамических эффектов, например, полосы здоровья, вырезания части изображения или реализации тайлов с анимацией.
let sprite = this.add.sprite(100, 100, 'player', 0);
sprite.setCrop(0, 0, 16, 24);
setCrop(x, y, width, height) задает прямоугольник,
который будет отображаться.(x, y) отсчитываются от верхнего левого угла
фрейма.width и height определяют размер видимой
области.Обрезка не изменяет исходное изображение, а лишь ограничивает область его визуализации. Это особенно удобно для динамического управления видимой частью спрайта без создания дополнительных текстур.
Паддинг (padding) позволяет добавить внутренние отступы вокруг фрейма, что влияет на позиционирование и взаимодействие спрайта с другими объектами. Phaser поддерживает несколько вариантов паддинга:
margin уже рассмотрен выше.setDisplaySize и
setOrigin — корректирует размер отображаемого
спрайта и точку его привязки.sprite.setDisplaySize(sprite.width + 10, sprite.height + 10);
sprite.setOrigin(0.5, 0.5);
setDisplaySize увеличивает визуальный размер спрайта
без изменения оригинального изображения, что можно рассматривать как
визуальный паддинг.setOrigin задает точку отсчета координат для
позиционирования и вращения. Паддинг можно компенсировать, сдвигая
origin.margin и spacing, если
фреймы получаются с “обрезанными” краями или с наложением соседних
кадров.setCrop, а не редактировать текстуру вручную.Комбинирование этих функций открывает возможности для сложных визуальных эффектов:
let frameIndex = 0;
this.time.addEvent({
delay: 100,
callback: () => {
sprite.setFrame(frameIndex);
sprite.setCrop(4, 4, 24, 40);
frameIndex = (frameIndex + 1) % 4;
},
loop: true
});
setDisplaySize для
эффекта увеличения или уменьшения спрайта.При работе с физикой Phaser важно учитывать паддинг и обрезку, так как коллайдеры привязываются к спрайту:
this.physics.add.existing(sprite);
sprite.body.setSize(24, 40);
sprite.body.setOffset(4, 4);
setSize задает размер коллайдера, независимо от
исходного спрайта.setOffset компенсирует паддинг или обрезку, чтобы
коллайдер совпадал с визуальной частью.Это гарантирует корректное взаимодействие объектов даже при активной обрезке и динамическом паддинге.
Управление обрезкой и паддингом фреймов является ключевым элементом при работе с анимацией и взаимодействием спрайтов в Phaser. Правильная настройка этих параметров повышает качество визуализации и обеспечивает точное управление игровыми объектами.