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

Градиенты — мощный инструмент визуального дизайна в играх. Phaser 3 предоставляет гибкий API для их создания, включая различные режимы повторения. В этой статье мы детально разберем режим `SAWTOOTH` (зубчатый), который позволяет создавать сложные, нелинейные переходы цвета, идеальные для фонов, эффектов или стилизованных интерфейсов. Вы научитесь контролировать форму и направление градиента, понимая, как параметры `shape`, `start` и `repeatMode` влияют на конечный результат.

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

Живой запуск

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

Исходный код


class Example extends Phaser.Scene
{
    create ()
    {
        this.add.gradient({
            repeatMode: 2, // SAWTOOTH
            start: { x: 0.25, y: 0.5 },
            shape: { x: 0.25, y: 0 }
        }, 400, 300, 800, 400);

        // Highlight central gradient unit.
        this.add.rectangle(300, 300, 200, 400).setStrokeStyle(1, 0xff0000, 0.5);
    }
}

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

const game = new Phaser.Game(config);

Что такое режим повторения SAWTOOTH?

Параметр repeatMode в методе this.add.gradient() определяет, как градиентная заливка будет вести себя за пределами своей базовой области. Значение `2соответствует константеPhaser.GameObjects.Gradient.SAWTOOTH`.

В отличие от простого повторения (REPEAT, режим 1), режим SAWTOOTH создает эффект "пилы": цвета градиента плавно нарастают, а затем резко сбрасываются к начальному значению. Это создает визуальный ритм и может имитировать волны, полосы или энергетические поля.

Визуализировать базовую единицу такого градиента помогает красная рамка, которую мы добавим в коде.

Создание градиента: разбор параметров

Основная магия происходит в вызове this.add.gradient(). Давайте разберем его аргументы по порядку.

this.add.gradient({
    repeatMode: 2, // SAWTOOTH
    start: { x: 0.25, y: 0.5 },
    shape: { x: 0.25, y: 0 }
}, 400, 300, 800, 400);
Первый аргумент — объект конфигурации:
*   `repeatMode: 2` — активирует зубчатый режим повторения.
*   `start: { x: 0.25, y: 0.5 }` — задает начальную точку градиента в нормализованных координатах (от 0 до 1) относительно его собственного размера. Здесь `x=0.25` означает, что градиент начинается на 25% ширины от левого края.
*   `shape: { x: 0.25, y: 0 }` — определяет вектор направления и «длину волны» градиента. Значение `x: 0.25` означает, что один полный цикл градиента (от стартового цвета до конечного и сброса) занимает 25% ширины объекта. `y: 0` указывает, что градиент строго горизонтальный.

Следующие четыре аргумента — это `x,y,width,height` для позиционирования и размера игрового объекта с градиентом на сцене.

Визуализация базового паттерна

Чтобы понять, где заканчивается один цикл SAWTOOTH и начинается следующий, в примере поверх градиента накладывается полупрозрачный прямоугольник.

this.add.rectangle(300, 300, 200, 400).setStrokeStyle(1, 0xff0000, 0.5);

Этот код создает контур прямоугольника (setStrokeStyle) без заливки. Ключевые совпадения: * Ширина прямоугольника — 200 пикселей. * Ширина градиента — 800 пикселей. * Параметр shape.x в градиенте — 0.25.

Расчет: 800 * 0.25 = 200. Красная рамка точно охватывает одну базовую единицу («зубец») градиентного паттерна. Все, что справа за ее пределами, — это повторение этого паттерна в режиме SAWTOOTH.

Настройка сцены и запуск игры

Код завершается стандартной для Phaser 3 конфигурацией игры. Обратите внимание на тип рендерера и цвет фона.

const config = {
    type: Phaser.WEBGL, // Используется WebGL для лучшей производительности
    width: 800,
    height: 600,
    backgroundColor: '#2d2d2d', // Темно-серый фон для контраста
    parent: 'phaser-example',
    scene: Example // Наша сцена с градиентом
};

const game = new Phaser.Game(config);

Использование Phaser.WEBGL обеспечивает аппаратное ускорение отрисовки градиентов. Темный фон (#2d2d2d) делает яркий градиент более выразительным.

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

Режим repeatMode: SAWTOOTH открывает возможность создавать динамичные, ритмичные текстуры с помощью всего одного вызова API. Поэкспериментируйте: измените вектор shape на { x: 0, y: 0.1 } для вертикального градиента, задайте start в другой точке или комбинируйте несколько градиентов с разными режимами для получения сложных фоновых паттернов. Этот прием отлично подойдет для создания анимированных энергетических барьеров, фонов подводного уровня или стилизованных полос загрузки.