О чем этот пример

Создание десятков и сотен однотипных игровых объектов — частая задача при разработке эффектов, фона или врагов. Ручное размещение и настройка каждого из них превращается в рутину. Класс `Group` в Phaser решает эту проблему, позволяя генерировать и конфигурировать множество объектов одним вызовом. В этой статье мы разберем, как с помощью опции `setRotation` при создании группы задать стартовый угол и пошаговое изменение вращения для каждого её члена. Этот приём отлично подходит для создания сложных геометрических паттернов, анимационных систем или просто визуально приятных композиций из спрайтов.

Версия Phaser: код и демо в этой статье рассчитаны на Phaser 3.90.0.

Живой запуск

Ниже встроен рабочий билд примера. Оригинальный источник: GitHub.

Исходный код


class Example extends Phaser.Scene
{
    preload ()
    {
        this.load.setBaseURL('https://raw.githubusercontent.com/phaserjs/examples/master/public/');
        this.load.image('bar', 'assets/sprites/flectrum.png');
    }

    create ()
    {
        const group = this.add.group({
            key: 'bar',
            repeat: 32,
            setXY: { x: 400, y: 300 },
            setRotation: { value: 0, step: 0.06 },
            setScale: { x: 6 }
        });
    }
}

const config = {
    type: Phaser.AUTO,
    width: 800,
    height: 600,
    backgroundColor: '#2d2d2d',
    parent: 'phaser-example',
    scene: Example
};

const game = new Phaser.Game(config);

Создание группы с помощью this.add.group()

Основной инструмент для работы с множеством объектов — метод this.add.group(). Он принимает объект конфигурации, в котором мы описываем, какие объекты создавать и как их инициализировать.

В нашем примере группа создается в методе create() сцены. Ключевые параметры конфигурации: - key: ключ текстуры для создаваемых спрайтов. - repeat: количество *дополнительных* объектов. Итоговое количество = repeat + 1. - setXY: задает позицию для всех объектов группы. - setRotation и setScale — именно те опции, которые позволяют кастомизировать каждый объект в группе.

const group = this.add.group({
    key: 'bar',
    repeat: 32,
    setXY: { x: 400, y: 300 },
    setRotation: { value: 0, step: 0.06 },
    setScale: { x: 6 }
});

Как работает setRotation

Опция setRotation ожидает объект с двумя свойствами: value и step. Её логика проста, но мощна: она применяет вращение к каждому объекту в группе последовательно, начиная с первого.

- value: это начальный угол вращения (в радианах) для *первого* объекта в группе. - step: это значение, которое прибавляется к углу вращения для каждого следующего объекта.

Таким образом, если value = 0, а step = 0.06, то вращение объектов будет: 0, 0.06, 0.12, 0.18 и так далее. Это создает красивый веерообразный или спиралевидный эффект, в зависимости от начального позиционирования.

// Пример конфигурации setRotation
setRotation: { value: 0, step: 0.06 }

Взаимодействие с другими настройками группы

Важно понимать, что все опции конфигурации (setXY, setRotation, setScale) применяются к объектам в одном порядке. В нашем примере все 33 спрайта будут помещены в одну точку (400, 300), но каждый будет повернут на свой угол и масштабирован по оси X.

Опция setScale: { x: 6 } растягивает каждый спрайт вширь, делая тонкие длинные полоски. В сочетании с постепенным вращением это создает иллюзию лучей, расходящихся из центра.

// Полная конфигурация группы с позицией, вращением и масштабом
{
    key: 'bar',
    repeat: 32,
    setXY: { x: 400, y: 300 },
    setRotation: { value: 0, step: 0.06 },
    setScale: { x: 6 }
}

Практическое применение и вариации

Такой подход — не просто для красоты. Его можно использовать для: 1. **Создания круговых интерфейсов или меню**, где элементы равномерно распределены по окружности. 2. **Генерации сложных геометрических узоров или фонов.** 3. **Быстрого прототипирования поведения роя объектов** (например, стаи птиц или роя частиц), где каждому элементу задано свое начальное направление.

Экспериментируйте с параметрами step и value. Например, задав value: Math.PI / 4, вы сместите всю композицию на 45 градусов. А изменив step на отрицательное значение, вы поменяете направление "раскручивания" веера.

// Вариация: смещенный старт и обратное направление вращения
setRotation: { value: Math.PI / 4, step: -0.03 }

Что попробовать дальше

Использование setRotation при создании группы — это эффективный и декларативный способ мгновенно получить набор объектов с прогрессивно изменяющимся вращением. Этот метод избавляет от необходимости писать циклы для инициализации и позволяет сосредоточиться на творческой части — подборе правильных значений для визуального эффекта. **Идеи для экспериментов:** 1. Попробуйте комбинировать setRotation с setXY.step, чтобы объекты не только вращались, но и расходились от центра по радиусу. 2. Добавьте setAlpha с шагом, чтобы создать эффект затухания. 3. Используйте этот прием для создания анимированного циферблата или компаса, где каждое деление — это отдельный спрайт в группе.