В Phaser фреймы спрайтовых атласов и спрайт-листов являются основой
для анимаций. Для удобного создания последовательностей анимаций
используется генерация фреймов с помощью методов
generateFrameNumbers и
generateFrameNames. Они позволяют быстро
получить массив фреймов, который затем применяется при создании анимаций
через anims.create.
generateFrameNumbersМетод generateFrameNumbers применяется для спрайт-листов
(spritesheet), когда все кадры пронумерованы целыми числами. Основной
синтаксис:
this.anims.generateFrameNumbers(key, config);
Параметры:
key — строка, идентификатор спрайт-листа,
зарегистрированного через this.load.spritesheet.
config — объект с настройками генерации фреймов:
start (число) — индекс первого фрейма.end (число) — индекс последнего фрейма.first (число, опционально) — индекс фрейма, который
будет использоваться первым в анимации.frames (массив, альтернативно) — конкретный список
фреймов, если требуется нестандартная последовательность.Пример использования:
this.load.spritesheet('player', 'assets/player.png', { frameWidth: 32, frameHeight: 48 });
const walkFrames = this.anims.generateFrameNumbers('player', { start: 0, end: 5 });
this.anims.create({
key: 'walk',
frames: walkFrames,
frameRate: 10,
repeat: -1
});
В этом примере создается анимация ходьбы, используя фреймы с 0 по 5
из спрайт-листа player. Метод возвращает массив объектов
фреймов в формате:
[{ key: 'player', frame: 0 }, { key: 'player', frame: 1 }, ...]
Этот массив полностью совместим с конфигурацией анимаций Phaser.
generateFrameNamesМетод generateFrameNames предназначен для атласов
(texture atlas) и позволяет генерировать фреймы по имени, если фреймы
имеют последовательную нумерацию в именах. Часто применяется при работе
с .json атласами, где каждый кадр имеет уникальное имя,
например: explosion_01, explosion_02, …,
explosion_10.
Синтаксис:
this.anims.generateFrameNames(key, config);
Параметры:
key — строка, идентификатор загруженного атласа
(this.load.atlas).
config — объект конфигурации:
start — номер первого фрейма.end — номер последнего фрейма.prefix — строка, добавляемая перед номером фрейма.suffix — строка, добавляемая после номера фрейма
(например, .png).zeroPad — количество цифр в номере, с ведущими
нулями.frames — массив конкретных фреймов, если требуется
нестандартная последовательность.Пример использования:
this.load.atlas('explosion', 'assets/explosion.png', 'assets/explosion.json');
const explosionFrames = this.anims.generateFrameNames('explosion', {
start: 1,
end: 10,
prefix: 'explosion_',
zeroPad: 2
});
this.anims.create({
key: 'explode',
frames: explosionFrames,
frameRate: 15,
hideOnComplete: true
});
В этом примере будут сгенерированы фреймы: explosion_01,
explosion_02, …, explosion_10. Метод
возвращает массив объектов вида:
[{ key: 'explosion', frame: 'explosion_01' }, ...]
generateFrameNumbers и generateFrameNames| Характеристика | generateFrameNumbers |
generateFrameNames |
|---|---|---|
| Используемый ресурс | Spritesheet | Texture Atlas |
| Ссылка на фреймы | По индексу | По имени |
| Поддержка нумерации | start–end индексы | start–end с префиксом, суффиксом, zeroPad |
| Результат | Массив объектов { key, frame } |
Массив объектов { key, frame } с именами |
Оба метода поддерживают генерацию нестандартных последовательностей:
const customFrames = this.anims.generateFrameNumbers('player', { frames: [0, 2, 4, 3, 1] });
или для имен:
const selectedFrames = this.anims.generateFrameNames('explosion', {
frames: ['explosion_01', 'explosion_03', 'explosion_07']
});
Это полезно для анимаций, где кадры идут в произвольном порядке или требуется «скачок» между фреймами.
anims.createСгенерированные массивы фреймов можно использовать напрямую при создании анимаций:
this.anims.create({
key: 'jump',
frames: this.anims.generateFrameNumbers('player', { start: 6, end: 8 }),
frameRate: 12,
repeat: 0
});
Для атласов:
this.anims.create({
key: 'coin_spin',
frames: this.anims.generateFrameNames('coins', {
start: 1,
end: 6,
prefix: 'coin_',
zeroPad: 2
}),
frameRate: 10,
repeat: -1
});
generateFrameNumbers.generateFrameNames для гибкой работы с именами кадров.frames, а не только диапазон.Эти методы формируют основу для всех анимаций в Phaser, позволяя быстро создавать последовательности кадров, избегая ручного перечисления каждого фрейма и обеспечивая чистый, читаемый код.