О чем этот пример
Градиенты — мощный инструмент для создания атмосферы и глубины в 2D-играх. Phaser 3 предоставляет гибкую систему их генерации, включая различные режимы повторения. В этой статье мы разберем режим `repeatMode: 0` (EXTEND), который позволяет растянуть крайние цвета градиента за пределы его основной области. Это особенно полезно для создания бесшовных фонов, плавных переходов цвета и визуальных эффектов, не требующих текстур.
Версия Phaser: код и демо в этой статье рассчитаны на Phaser 3.90.0.
Живой запуск
Ниже встроен рабочий билд примера. Оригинальный источник: GitHub.
Исходный код
class Example extends Phaser.Scene
{
create ()
{
this.add.gradient({
repeatMode: 0, // EXTEND
start: { x: 0.25, y: 0.5 },
shape: { x: 0.5, y: 0 }
}, 400, 300, 800, 400);
// Highlight central gradient unit.
this.add.rectangle(400, 300, 400, 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);
Что такое режим EXTEND?
В Phaser 3 параметр repeatMode объекта градиента определяет, как он будет вести себя за пределами своей нормализованной области (от 0 до 1 по осям X и Y).
Значение `0соответствует константеPhaser.Types.GameObjects.Gradient.GradientRepeatMode.EXTEND`. В этом режиме цвета на краях градиента (начальный и конечный) продолжаются ("растягиваются") бесконечно во всех направлениях за его пределами. Представьте, что вы взяли край градиента и потянули его, заполняя всё пространство этим сплошным цветом.
Создание градиента с EXTEND
Давайте создадим базовый линейный градиент, используя метод this.add.gradient(). Ключевым параметром здесь будет repeatMode.
this.add.gradient({
repeatMode: 0, // EXTEND
start: { x: 0.25, y: 0.5 },
shape: { x: 0.5, y: 0 }
}, 400, 300, 800, 400);
Разберем параметры конфигурационного объекта:
* `repeatMode: 0` — активирует режим EXTEND.
* `start: { x: 0.25, y: 0.5 }` — определяет начальную точку градиента в нормализованных координатах (относительно его собственного размера). Здесь X=25%, Y=50%.
* `shape: { x: 0.5, y: 0 }` — задает вектор направления градиента. Значение `{x: 0.5, y: 0}` означает, что градиент будет горизонтальным, начиная от точки `start` и двигаясь вправо.
Следующие четыре числа — это позиция (X, Y) и размеры (ширина, высота) игрового объекта градиента на экране. В данном случае он центрирован (400, 300) и имеет размер 800x400.
Визуализация области градиента
Чтобы наглядно увидеть, где заканчивается "основная" область градиента и начинается "растянутая" часть, добавим поверх него полупрозрачный контур.
// Highlight central gradient unit.
this.add.rectangle(400, 300, 400, 400).setStrokeStyle(1, 0xff0000, 0.5);
Этот код создает прямоугольник Phaser.GameObjects.Rectangle того же размера, что и градиент (800x400), и позиционирует его по тем же координатам. Метод .setStrokeStyle(1, 0xff0000, 0.5) задает стиль обводки: толщина 1 пиксель, красный цвет (0xff0000) с прозрачностью 50% (0.5). Красная рамка покажет вам исходную область градиента. Всё, что за ее пределами, будет заполнено крайними цветами (в данном примере — начальным цветом слева и конечным справа), демонстрируя работу режима EXTEND.
Конфигурация сцены и игры
Для запуска примера необходима стандартная конфигурация Phaser Game.
const config = {
type: Phaser.WEBGL, // Для градиентов требуется WebGL
width: 800,
height: 600,
backgroundColor: '#2d2d2d',
parent: 'phaser-example',
scene: Example // Наша сцена с градиентом
};
const game = new Phaser.Game(config);
Важно использовать type: Phaser.WEBGL, так как градиенты в Phaser 3 поддерживаются только в режиме WebGL-рендеринга. Canvas-рендерер их не отрисует.
Что попробовать дальше
Режим repeatMode: 0 (EXTEND) — это простой и эффективный способ создать градиент, который не повторяется, а плавно переходит в сплошной цвет. Он идеально подходит для фонов, где нужно избежать резких краев или тилевых узоров.
**Идеи для экспериментов:**
1. Измените вектор shape, чтобы получить вертикальный или диагональный градиент, и понаблюдайте, как EXTEND работает в новых направлениях.
2. Поэкспериментируйте с другими значениями repeatMode (например, `1` для REPEAT) и сравните результаты.
3. Создайте несколько градиентов с разными режимами и наложениями (setBlendMode) для получения сложных цветовых эффектов.
4. Используйте EXTEND-градиент в качестве маски или слоя поверх игрового мира для создания эффектов заката, тумана или подводного мира.
