Обрезка и паддинг фреймов

В библиотеке Phaser для работы с игровыми спрайтами и анимациями используется понятие фреймов. Фрейм — это отдельное изображение из спрайт-листа (spritesheet) или атласа текстур, которое может быть отображено в игре как самостоятельный объект. Управление фреймами включает не только выбор нужного кадра, но и точную настройку его границ и отступов.


Спрайт-листы и атласы текстур

Спрайт-лист — это одно изображение, содержащее несколько фреймов, расположенных в сетке. Для работы с ними необходимо указать параметры: ширину и высоту каждого кадра, количество фреймов и возможные отступы между ними.

this.load.spritesheet('player', 'assets/player.png', {
    frameWidth: 32,
    frameHeight: 48,
    margin: 2,
    spacing: 4
});
  • frameWidth и frameHeight — размеры кадра.
  • marginотступ от края изображения до первого фрейма. Часто применяется, если текстура имеет рамку.
  • spacingрасстояние между соседними кадрами. Используется для корректного извлечения фреймов без наложения соседних изображений.

Правильная настройка этих параметров критична для того, чтобы анимация отображалась корректно, без “залипания” или наложения кадров.


Обрезка фреймов (crop)

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 поддерживает несколько вариантов паддинга:

  1. Паддинг при загрузке спрайт-листа — параметр margin уже рассмотрен выше.
  2. Паддинг через 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. Правильная настройка этих параметров повышает качество визуализации и обеспечивает точное управление игровыми объектами.