вариант
ДомДом Skill Другое v4-new-features

v4-new-features

phaserjs/phaser phaserjs/phaser

Используйте этот навык при изучении новых функций, игровых объектов, компонентов и возможностей рендеринга, добавленных в Phaser 4. В курсе рассматриваются фильтры, RenderNodes, CaptureFrame, Gradient, Noise, SpriteGPULayer, TilemapGPULayer, компонент Lighting, RenderSteps и новые режимы оттенков. Триггеры: нововведения в версии 4, функции Phaser 4, RenderNode, SpriteGPULayer, CaptureFrame, игровой объект Gradient, игровой объект Noise, новые режимы оттенков. Для переноса кода из версии 3 в версию 4 см. навык «Перенос кода из v3 в v4».

...Расширить все
62
Обновлено время 4 августа 2026 г.

Новые функции Phaser 4

Новые функции и возможности Phaser 4: Фильтры (заменяющие FX/BitmapMask), RenderNodes (заменяющие Pipelines), игровые объекты CaptureFrame, Gradient, Noise, SpriteGPULayer, TilemapGPULayer, компонент Lighting, RenderSteps и новые режимы оттенков.

Связанные навыки:../v3-to-v4-migration/SKILL.md, ../filters-and-postfx/SKILL.md, ../game-object-components/SKILL.md, ../tilemaps/SKILL.md

Переходите с версии v3? Ознакомьтесь с Руководством по переходу с v3 на v4, где приведены пошаговые инструкции по изменению кода, список удалённых API и контрольный список для перехода.

Обзор: что изменилось в версии v4

Phaser 4 представляет собой полную переработку движка рендеринга WebGL. В версии v3 каждый подсистемный компонент управлял состоянием WebGL независимо, что приводило к конфликтам (например, некоторые эффекты нарушали работу масок). В версии v4 управление состоянием WebGL централизовано с помощью графа RenderNode, в котором каждый узел обрабатывает ровно одну задачу рендеринга.

Основные удаления

Основные дополнения

  • Новые GameObjects: CaptureFrame, Gradient, Noise, NoiseCell2D/3D/4D, NoiseSimplex2D/3D, SpriteGPULayer, Stamp, TilemapGPULayer
  • Новые компоненты: Lighting, RenderSteps, RenderNodes
  • Новые режимы оттенка: MULTIPLY, FILL, ADD, SCREEN, OVERLAY, HARD_LIGHT
  • Новые фильтры: Blend, Blocky, CombineColorMatrix, GradientMap, ImageLight, Key, Mask, NormalTools, PanoramaBlur, ParallelFilters, Quantize, Sampler, Threshold
  • Ориентация GL: в версии 4 используется стандартная ориентация GL (Y=0 внизу для текстур)

Система фильтров (заменяет FX и BitmapMask)

Полное руководство: filters-and-postfx.md

Фильтры объединяют системы FX и Mask версии v3. Каждый фильтр принимает входное изображение и генерирует выходное изображение посредством прохода шейдера. Фильтры можно применять к любому игровому объекту или камере — в версии v3 существовали ограничения на то, какие объекты поддерживали FX.

// Подход v3 (FX):
sprite.preFX.addGlow(0xff00ff, 4);
sprite.postFX.addBlur(0, 2, 2, 1);// Подход v4 (фильтры):
sprite.enableFilters();
sprite.filters.internal.addGlow(0xff00ff, 4, 0, 1);
sprite.filters.external.addBlur(0, 2, 2, 1);// Подход версии 3 (BitmapMask):
const mask = new Phaser.Display.Masks.BitmapMask(scene, maskImage);
sprite.setMask(mask);// Подход v4 (FilterMask):
sprite.enableFilters();
sprite.filters.internal.addMask(maskImage);

Внутренние и внешние фильтры: внутренние фильтры запускаются до преобразования камеры (локальное пространство объекта, меньшая нагрузка). Внешние фильтры запускаются после (пространство экрана, полное разрешение).


RenderNodes (замена конвейеров)

В версии v3 конвейер представлял собой систему рендеринга, которая часто выполняла несколько задач. В версии v4 каждый RenderNode обрабатывает одну задачу рендеринга с помощью метода run(). Некоторые узлы также имеют метод batch() для накопления состояния перед рисованием.

Архитектура

RenderNodeManager (в рендерере WebGL) управляет всеми узлами рендеринга. Игровые объекты обращаются к узлам через карты, основанные на ролях.

// Роли RenderNode на игровом объекте:
// - «Submitter»: запускает другие роли узлов для каждого элемента
// - «Transformer»: предоставляет координаты вершин
// - «Texturer»: обрабатывает текстуры// Игровые объекты имеют карты узлов рендеринга по умолчанию и настраиваемые:
gameObject.defaultRenderNodes  // встроенные узлы по ролям
gameObject.customRenderNodes   // переопределения по ролям
gameObject.renderNodeData      // данные, индексированные по имени узла

Настройка пользовательских узлов рендеринга

// Переопределить конкретную роль узла рендеринга:
gameObject.setRenderNodeRole('Submitter', 'MyCustomSubmitter');// Передать данные узлу рендеринга:
gameObject.setRenderNodeRole('Transformer', 'MyTransformer', {
    customProperty: 42
});// Удаление пользовательского узла (используется значение по умолчанию):
gameObject.setRenderNodeRole('Submitter', null);

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

Обработчики пакетов (накапливают и рисуют несколько объектов за один вызов рисования):

  • BatchHandlerQuad — стандартная пакетная обработка четырехугольников (Image, Sprite, BitmapText и т. д.)
  • BatchHandlerQuadSingle — вариант с одним квадрантом
  • BatchHandlerTileSprite — пакетная обработка TileSprite
  • BatchHandlerTriFlat — пакетная обработка плоских треугольников (Graphics, Shape)
  • BatchHandlerPointLight — пакетная обработка точечных источников света
  • BatchHandlerStrip — пакетная обработка полос треугольников

Submitters (координатное рендеринг по типу объекта):

  • SubmitterQuad, SubmitterTile, SubmitterTileSprite
  • SubmitterSpriteGPULayer, SubmitterTilemapGPULayer

Трансформаторы (вычисление координат вершин):

  • TransformerImage, TransformerStamp, TransformerTile, TransformerTileSprite

Текстуризаторы (управление привязкой текстур):

  • TexturerImage, TexturerTileSprite

Фильтры (постобработка — см. filters-and-postfx.md):

  • BaseFilter, BaseFilterShader
  • FilterBarrel, FilterBlend, FilterBlocky, FilterBlur (варианты Low/Med/High)
  • FilterBokeh, FilterColorMatrix, FilterCombineColorMatrix
  • FilterDisplacement, FilterGlow, FilterGradientMap, FilterImageLight
  • FilterKey, FilterMask, FilterNormalTools, FilterPanoramaBlur
  • FilterParallelFilters, FilterPixelate, FilterQuantize
  • FilterSampler, FilterShadow, FilterThreshold, FilterVignette, FilterWipe

Прочее:

  • Camera, FillCamera, FillRect, FillPath, FillTri
  • DrawLine, StrokePath, ShaderQuad
  • ListCompositor, RebindContext, YieldContext
  • DynamicTextureHandler

Расширение: Пользовательские узлы рендеринга

// Регистрация конструктора пользовательского узла:
renderer.renderNodes.addNodeConstructor('MyNode', MyNodeClass);// Или добавление готового экземпляра узла:
renderer.renderNodes.addNode('MyNode', myNodeInstance);

Новые игровые объекты

CaptureFrame

Захватывает текущее содержимое фреймбуфера в текстуру в той точке списка отображения, где он находится. Сам по себе ничего не рендерит. Только для WebGL.

// Все, что находится выше этого в списке отображения, будет захвачено:
const image1 = this.add.image(400, 300, 'background');// Включить использование фреймбуфера на камере:
this.cameras.main.setForceComposite(true);// Создать точку захвата:
const capture = this.add.captureFrame('myCapturedTexture');// Использование захваченной текстуры на другом объекте:
const overlay = this.add.image(400, 300, 'myCapturedTexture');
// Добавление фильтров к наложению для искажения захваченной сцены

Важные детали:

  • Требуется camera.setForceComposite(true) или контекст фреймбуфера (фильтры, DynamicTexture, камера с частичным альфа-каналом)
  • Внутри контейнера с фильтрами захватывается только содержимое этого контейнера
  • Установка visible = false останавливает захват
  • Компоненты: BlendMode, Depth, RenderNodes, Visible

Источник: src/gameobjects/captureframe/CaptureFrame.js

Gradient

Отображает цветовые градиенты, прорисованные на GPU. Является производным от Shader. Поддерживает линейный, радиальный и другие режимы градиента с настраиваемым объектом ColorRamp, содержащим объекты ColorBand.

// Простой линейный градиент:
const grad = this.add.gradient(undefined, 100, 100, 200, 200);// Сложный радиальный градиент с несколькими цветовыми полосами:
const halo = this.add.gradient({
   bands: [
        { start: 0.5, end: 0.6, colorStart: [0.5, 0.5, 1, 0], colorEnd: 0xffffff, colorSpace: 1, interpolation: 4 },
        { start: 0.6, end: 1, colorStart: 0xffffff, colorEnd: [1, 0.5, 0.5, 0], colorSpace: 1, interpolation: 3 }
    ],
    dither: true,
    repeatMode: 1,
    shapeMode: 2,       // радиальный
    start: { x: 0.5, y: 0.5 },
    shape: { x: 0.5, y: 0.0 }
}, 400, 300, 800, 800);// Анимация:
halo.offset = 0.1 * (1 + Math.sin(time / 1000));

Ключевые параметры:

  • Конфигурация: GradientQuadConfig с параметрами bands, shapeMode, repeatMode, start, shape, dither
  • Цвета задаются с помощью ColorRamp с объектами ColorBand (поддерживает HSV, различные режимы интерполяции)
  • Вызов gradient.ramp.encode() после изменения данных градиента во время выполнения

Источник: src/gameobjects/gradient/Gradient.js

Объекты шума

Все типы шума наследуются от Shader и доступны только в WebGL. Доступно шесть вариантов:

// Базовый белый шум:
const noise = this.add.noise({
    noiseOffset: [0, 0],
    noisePower: 1
}, 100, 100, 256, 256);// Клеточный шум с настройками:
const cells = this.add.noiseCell2D({
    noiseOffset: [0, 0],
   noiseIterations: 3,
    noiseNormalMap: true    // вывод в виде карты нормалей для освещения
}, 200, 200, 256, 256);// Шум Simplex для естественных эффектов:
const simplex = this.add.noiseSimplex2D({
    noiseFlow: 0,           // анимируйте этот параметр для эволюции
   noiseIterations: 4,
    noiseWarpAmount: 0.5,   // турбулентность
    noiseSeed: 42,
    noiseNormalMap: false
}, 300, 300, 256, 256);

Общие свойства для всех типов шума:

  • noiseOffset — массив [x, y] для прокрутки узора
  • noisePower — регулирует уровни выходного сигнала (большее значение подавляет высокие значения)
  • noiseNormalMap — выходная карта нормалей (для интеграции с освещением)
  • noiseIterations — уровень детализации (для типов cellular/simplex)

Математические эквиваленты: Phaser.Math.Hash(), Phaser.Math.HashCell(), Phaser.Math.HashSimplex()

Источник: src/gameobjects/noise/

SpriteGPULayer

Осуществляет рендеринг очень большого количества квадров (до миллионов) за один вызов рисования, сохраняя данные в статическом буфере GPU. Работает до 100 раз быстрее, чем отдельные спрайты. Только для WebGL.

const layer = this.add.spriteGPULayer(texture, size); // size = максимальное количество элементов// Добавление элементов (делайте это за один раз, а не постепенно):
const member = { x: 100, y: 200, frame: 'tree', scaleX: 1, scaleY: 1, alpha: 1 };
layer.addMember(member);// Для эффективности при миллионах записей повторно используйте объект элемента:
member.x = 300;
member.y = 400;
member.frame = 'bush';
layer.addMember(member);// Включить освещение на слое:
layer.setLighting(true);

Ключевые детали:

  • Только одна текстура (без мультиатласа), одно изображение на слой
  • Члены поддерживают анимации типа твинов (затухание, отскок, волна, смена цвета), заданные при создании
  • Обновление содержимого буфера требует значительных ресурсов — заполняйте его один раз и оставляйте без изменений
  • Для пиксельной графики рекомендуется использовать текстуры размером, кратным двум, чтобы избежать видимых стыков
  • Визуальное «удаление» элементов путем установки scaleX/scaleY/alpha в 0 (это позволяет избежать перестроения буфера)
  • Компоненты: Alpha, BlendMode, Depth, ElapseTimer, Lighting, Mask, RenderNodes, TextureCrop, Visible

Источник: src/gameobjects/spritegpulayer/SpriteGPULayer.js


Новые компоненты

Полный справочник по компонентам: game-object-components.md

Компонент освещения

Заменяет подход версии 3, в котором назначался конвейер освещения. Только для WebGL.

// Подход v3:
sprite.setPipeline('Light2D');// Подход v4:
sprite.setLighting(true);// Самозатенение (имитирует тени на поверхности на основе яркости текстуры):
sprite.setSelfShadow(true, 0.5,1/3);
// Аргументы: enabled, penumbra (чем меньше, тем четче), diffuseFlatThreshold (0–1)// Использовать общеигровое значение по умолчанию для самозатенения:
sprite.setSelfShadow(null);  // считывается из config.render.selfShadow

Поддерживается в: BitmapText, Blitter, Graphics, Shape, Image, Sprite, Particles, SpriteGPULayer, Stamp, Text, TileSprite, Video, TilemapLayer, TilemapGPULayer.

Примечание по пакетной обработке: освещение изменяет шейдер, что нарушает пакеты. Для наилучшей производительности группируйте освещённые объекты вместе, а неосвещённые — отдельно.

Источник: src/gameobjects/components/Lighting.js

Компонент RenderSteps

Позволяет внедрять пользовательскую логику в процесс рендеринга игрового объекта. Только для WebGL. Система Filters использует RenderSteps внутренне.

// Добавление пользовательского шага рендеринга:
gameObject.addRenderStep(function (renderer, gameObject, drawingContext, parentMatrix, renderStep, displayList, displayListIndex) {
    // Пользовательская логика рендеринга здесь
    // Вызов следующего шага, когда все готово:
   var nextFn = gameObject._renderSteps[renderStep + 1];
    if (nextFn) {
        nextFn(renderer, gameObject, drawingContext, parentMatrix, renderStep + 1, displayList, displayListIndex);
    }
});

Ключевые моменты:

  • Шаги хранятся в массиве _renderSteps и выполняются с помощью renderWebGLStep()
  • Первый шаг запускается первым и отвечает за вызов последующих шагов
  • Именно так фильтры откладывают и управляют потоком renderWebGL

Источник: src/gameobjects/components/RenderSteps.js

Компонент RenderNodes

Предоставляет на игровых объектах карты defaultRenderNodes, customRenderNodes и renderNodeData. См. раздел «RenderNodes» выше для ознакомления с использованием.

Источник: src/gameobjects/components/RenderNodes.js


TilemapGPULayer

Полное руководство по тайл-мапам: tilemaps.md

Высокопроизводительный рендеринг тайл-карты на базе GPU. Осуществляет рендеринг всего слоя в виде одного квадрата с помощью специализированного шейдера. Только для WebGL.

// Создание с помощью Tilemap с флагом gpu:
const map = this.make.tilemap({ key: 'level1' });
const tileset = map.addTilesetImage('tiles', 'tilesImage');
const gpuLayer = map.createLayer('Ground', tileset, 0, 0, true);  // последний аргумент: gpu = true

Возможности:

  • Один набор плиток с одним текстурным изображением
  • Максимум 4096x4096 плиток, до 2^23 уникальных идентификаторов плиток
  • Поддерживается зеркальное отражение плиток и анимация
  • Только ортогональные карты тайлов (без изометрических/гексагональных)
  • Идеальная фильтрация текстур в режиме LINEAR (без швов между плитками)
  • Стоимость рассчитывается за пиксель, а не за плитку — отсутствие потери производительности при большом количестве видимых плиток

Ограничения:

  • Невозможно использовать несколько наборов тайлов
  • Для обновления при редактировании требуется ручной вызов generateLayerDataTexture()
  • Только ортогографический режим

Внутренние данные: Данные тайлов хранятся в текстуре (4 байта на тайл: 2 бита переворачивания, 1 бит анимации, 1 неиспользуемый бит, 28-битный индекс тайла). Данные анимации — в отдельной текстуре.

Источник: src/tilemaps/TilemapGPULayer.js


Подробные параметры настройки, таблицы справочника API и карты исходных файлов см. в справочном руководстве.

Посмотреть на GitHub

Phaser 4 New Features

New features and capabilities in Phaser 4: Filters (replacing FX/BitmapMask), RenderNodes (replacing Pipelines), CaptureFrame, Gradient, Noise game objects, SpriteGPULayer, TilemapGPULayer, Lighting component, RenderSteps, and new tint modes.

Related skills: ../v3-to-v4-migration/SKILL.md, ../filters-and-postfx/SKILL.md, ../game-object-components/SKILL.md, ../tilemaps/SKILL.md

Migrating from v3? See the v3 to v4 Migration Guide for step-by-step code changes, removed APIs, and a migration checklist.

Overview: What Changed in v4

Phaser 4 is a complete overhaul of the WebGL rendering engine. The v3 renderer let each subsystem manage WebGL state independently, causing conflicts (e.g. certain FX breaking Masks). v4 centralizes WebGL state management through a RenderNode graph, where each node handles exactly one rendering task.

Key Removals

Key Additions

  • New GameObjects: CaptureFrame, Gradient, Noise, NoiseCell2D/3D/4D, NoiseSimplex2D/3D, SpriteGPULayer, Stamp, TilemapGPULayer
  • New Components: Lighting, RenderSteps, RenderNodes
  • New Tint Modes: MULTIPLY, FILL, ADD, SCREEN, OVERLAY, HARD_LIGHT
  • New Filters: Blend, Blocky, CombineColorMatrix, GradientMap, ImageLight, Key, Mask, NormalTools, PanoramaBlur, ParallelFilters, Quantize, Sampler, Threshold
  • GL Orientation: v4 uses standard GL orientation (Y=0 at bottom for textures)

Filters System (Replacing FX and BitmapMask)

Full reference: filters-and-postfx.md

Filters unify the v3 FX and Mask systems. Every filter takes an input image and produces an output image via a shader pass. Filters can be applied to any game object or camera -- v3 had restrictions on which objects supported FX.

// v3 approach (FX):
sprite.preFX.addGlow(0xff00ff, 4);
sprite.postFX.addBlur(0, 2, 2, 1);// v4 approach (Filters):
sprite.enableFilters();
sprite.filters.internal.addGlow(0xff00ff, 4, 0, 1);
sprite.filters.external.addBlur(0, 2, 2, 1);// v3 approach (BitmapMask):
const mask = new Phaser.Display.Masks.BitmapMask(scene, maskImage);
sprite.setMask(mask);// v4 approach (FilterMask):
sprite.enableFilters();
sprite.filters.internal.addMask(maskImage);

Internal vs External: Internal filters run before the camera transform (object-local space, cheaper). External filters run after (screen space, full-resolution).


RenderNodes (Replacing Pipelines)

In v3, a Pipeline was a rendering system that often handled multiple responsibilities. In v4, each RenderNode handles a single rendering task via its run() method. Some nodes also have a batch() method to accumulate state before drawing.

Architecture

The RenderNodeManager (on the WebGL renderer) owns all render nodes. Game objects reference nodes through role-based maps.

// RenderNode roles on a game object:
// - 'Submitter': runs other node roles for each element
// - 'Transformer': provides vertex coordinates
// - 'Texturer': handles textures// GameObjects have default and custom render node maps:
gameObject.defaultRenderNodes  // built-in nodes per role
gameObject.customRenderNodes   // overrides per role
gameObject.renderNodeData      // data keyed by node name

Setting Custom RenderNodes

// Override a specific render role:
gameObject.setRenderNodeRole('Submitter', 'MyCustomSubmitter');// Pass data to a render node:
gameObject.setRenderNodeRole('Transformer', 'MyTransformer', {
    customProperty: 42
});// Remove a custom node (falls back to default):
gameObject.setRenderNodeRole('Submitter', null);

Built-in RenderNode Types

Batch Handlers (accumulate and draw multiple objects per draw call):

  • BatchHandlerQuad -- standard quad batching (Image, Sprite, BitmapText, etc.)
  • BatchHandlerQuadSingle -- single-quad variant
  • BatchHandlerTileSprite -- TileSprite batching
  • BatchHandlerTriFlat -- flat triangle batching (Graphics, Shape)
  • BatchHandlerPointLight -- point light batching
  • BatchHandlerStrip -- triangle strip batching

Submitters (coordinate rendering per object type):

  • SubmitterQuad, SubmitterTile, SubmitterTileSprite
  • SubmitterSpriteGPULayer, SubmitterTilemapGPULayer

Transformers (compute vertex positions):

  • TransformerImage, TransformerStamp, TransformerTile, TransformerTileSprite

Texturers (manage texture binding):

  • TexturerImage, TexturerTileSprite

Filters (post-processing -- see filters-and-postfx.md):

  • BaseFilter, BaseFilterShader
  • FilterBarrel, FilterBlend, FilterBlocky, FilterBlur (Low/Med/High variants)
  • FilterBokeh, FilterColorMatrix, FilterCombineColorMatrix
  • FilterDisplacement, FilterGlow, FilterGradientMap, FilterImageLight
  • FilterKey, FilterMask, FilterNormalTools, FilterPanoramaBlur
  • FilterParallelFilters, FilterPixelate, FilterQuantize
  • FilterSampler, FilterShadow, FilterThreshold, FilterVignette, FilterWipe

Other:

  • Camera, FillCamera, FillRect, FillPath, FillTri
  • DrawLine, StrokePath, ShaderQuad
  • ListCompositor, RebindContext, YieldContext
  • DynamicTextureHandler

Extending: Custom RenderNodes

// Register a custom node constructor:
renderer.renderNodes.addNodeConstructor('MyNode', MyNodeClass);// Or add a pre-built node instance:
renderer.renderNodes.addNode('MyNode', myNodeInstance);

New Game Objects

CaptureFrame

Captures the current framebuffer contents to a texture at the point in the display list where it sits. Does not render anything itself. WebGL only.

// Everything above this in the display list gets captured:
const image1 = this.add.image(400, 300, 'background');// Enable framebuffer usage on the camera:
this.cameras.main.setForceComposite(true);// Create the capture point:
const capture = this.add.captureFrame('myCapturedTexture');// Use the captured texture on another object:
const overlay = this.add.image(400, 300, 'myCapturedTexture');
// Add filters to the overlay to distort the captured scene

Key details:

  • Requires camera.setForceComposite(true) or a framebuffer context (Filters, DynamicTexture, camera with partial alpha)
  • Inside a Container with filters, captures only that Container's contents
  • Setting visible = false stops capturing
  • Components: BlendMode, Depth, RenderNodes, Visible

Source: src/gameobjects/captureframe/CaptureFrame.js

Gradient

Displays GPU-rendered color gradients. Extends Shader. Supports linear, radial, and other shape modes with configurable ColorRamp containing ColorBand objects.

// Simple linear gradient:
const grad = this.add.gradient(undefined, 100, 100, 200, 200);// Complex radial gradient with multiple color bands:
const halo = this.add.gradient({
    bands: [
        { start: 0.5, end: 0.6, colorStart: [0.5, 0.5, 1, 0], colorEnd: 0xffffff, colorSpace: 1, interpolation: 4 },
        { start: 0.6, end: 1, colorStart: 0xffffff, colorEnd: [1, 0.5, 0.5, 0], colorSpace: 1, interpolation: 3 }
    ],
    dither: true,
    repeatMode: 1,
    shapeMode: 2,       // radial
    start: { x: 0.5, y: 0.5 },
    shape: { x: 0.5, y: 0.0 }
}, 400, 300, 800, 800);// Animate:
halo.offset = 0.1 * (1 + Math.sin(time / 1000));

Key details:

  • Config: GradientQuadConfig with bands, shapeMode, repeatMode, start, shape, dither
  • Colors defined via ColorRamp with ColorBand objects (supports HSV, various interpolation modes)
  • Call gradient.ramp.encode() after modifying ramp data at runtime

Source: src/gameobjects/gradient/Gradient.js

Noise Game Objects

All noise types extend Shader and are WebGL only. Six variants available:

// Basic white noise:
const noise = this.add.noise({
    noiseOffset: [0, 0],
    noisePower: 1
}, 100, 100, 256, 256);// Cellular noise with customization:
const cells = this.add.noiseCell2D({
    noiseOffset: [0, 0],
    noiseIterations: 3,
    noiseNormalMap: true    // output as normal map for lighting
}, 200, 200, 256, 256);// Simplex noise for natural effects:
const simplex = this.add.noiseSimplex2D({
    noiseFlow: 0,           // animate this for evolution
    noiseIterations: 4,
    noiseWarpAmount: 0.5,   // turbulence
    noiseSeed: 42,
    noiseNormalMap: false
}, 300, 300, 256, 256);

Common properties across noise types:

  • noiseOffset -- [x, y] array to scroll the pattern
  • noisePower -- sculpt output levels (higher suppresses high values)
  • noiseNormalMap -- output normal map (for lighting integration)
  • noiseIterations -- detail level (cellular/simplex types)

Math equivalents: Phaser.Math.Hash(), Phaser.Math.HashCell(), Phaser.Math.HashSimplex()

Source: src/gameobjects/noise/

SpriteGPULayer

Renders very large numbers of quads (up to millions) in a single draw call by storing data in a static GPU buffer. Up to 100x faster than individual sprites. WebGL only.

const layer = this.add.spriteGPULayer(texture, size); // size = max number of members// Add members (do this all at once, not incrementally):
const member = { x: 100, y: 200, frame: 'tree', scaleX: 1, scaleY: 1, alpha: 1 };
layer.addMember(member);// Reuse the member object for efficiency with millions of entries:
member.x = 300;
member.y = 400;
member.frame = 'bush';
layer.addMember(member);// Enable lighting on the layer:
layer.setLighting(true);

Key details:

  • Single texture only (no multi-atlas), single image per layer
  • Members support tween-like animations (fade, bounce, wave, color shift) defined at creation
  • Updating buffer contents is expensive -- populate once, leave unchanged
  • Power-of-two textures recommended for pixel art to avoid seaming
  • "Remove" members visually by setting scaleX/scaleY/alpha to 0 (avoids buffer rebuild)
  • Components: Alpha, BlendMode, Depth, ElapseTimer, Lighting, Mask, RenderNodes, TextureCrop, Visible

Source: src/gameobjects/spritegpulayer/SpriteGPULayer.js


New Components

Full component reference: game-object-components.md

Lighting Component

Replaces the v3 approach of assigning a lighting pipeline. WebGL only.

// v3 approach:
sprite.setPipeline('Light2D');// v4 approach:
sprite.setLighting(true);// Self-shadowing (simulates surface shadows from texture brightness):
sprite.setSelfShadow(true, 0.5, 1/3);
// Args: enabled, penumbra (lower = sharper), diffuseFlatThreshold (0-1)// Use game-wide default for self-shadow:
sprite.setSelfShadow(null);  // reads from config.render.selfShadow

Supported on: BitmapText, Blitter, Graphics, Shape, Image, Sprite, Particles, SpriteGPULayer, Stamp, Text, TileSprite, Video, TilemapLayer, TilemapGPULayer.

Batching note: Lighting changes the shader, which breaks batches. Group lit objects together and unlit objects together for best performance.

Source: src/gameobjects/components/Lighting.js

RenderSteps Component

Allows injecting custom logic into the render process of a game object. WebGL only. The Filters system uses RenderSteps internally.

// Add a custom render step:
gameObject.addRenderStep(function (renderer, gameObject, drawingContext, parentMatrix, renderStep, displayList, displayListIndex) {
    // Custom rendering logic here
    // Call next step when ready:
    var nextFn = gameObject._renderSteps[renderStep + 1];
    if (nextFn) {
        nextFn(renderer, gameObject, drawingContext, parentMatrix, renderStep + 1, displayList, displayListIndex);
    }
});

Key details:

  • Steps are stored in _renderSteps array, executed via renderWebGLStep()
  • First step runs first and is responsible for calling subsequent steps
  • This is how Filters defer and control the renderWebGL flow

Source: src/gameobjects/components/RenderSteps.js

RenderNodes Component

Provides defaultRenderNodes, customRenderNodes, and renderNodeData maps on game objects. See the RenderNodes section above for usage.

Source: src/gameobjects/components/RenderNodes.js


TilemapGPULayer

Full tilemap reference: tilemaps.md

High-performance GPU-based tilemap rendering. Renders the entire layer as a single quad via a specialized shader. WebGL only.

// Create via Tilemap with the gpu flag:
const map = this.make.tilemap({ key: 'level1' });
const tileset = map.addTilesetImage('tiles', 'tilesImage');
const gpuLayer = map.createLayer('Ground', tileset, 0, 0, true);  // last arg: gpu = true

Capabilities:

  • Single tileset with single texture image
  • Maximum 4096x4096 tiles, up to 2^23 unique tile IDs
  • Tile flipping and animation supported
  • Orthographic tilemaps only (no isometric/hexagonal)
  • Perfect texture filtering in LINEAR mode (no tile seams)
  • Cost is per-pixel, not per-tile -- no performance loss with many visible tiles

Restrictions:

  • Cannot use multiple tilesets
  • Editing requires manual generateLayerDataTexture() call to update
  • Orthographic only

Internal data: Tile data stored in a texture (4 bytes/tile: 2 flip bits, 1 animation bit, 1 unused, 28-bit tile index). Animation data in a separate texture.

Source: src/tilemaps/TilemapGPULayer.js


For detailed configuration options, API reference tables, and source file maps, see the reference guide.

Все файлы

0 файлов

Установить v4-new-features

Скачайте файлы навыков и распакуйте их в каталог .claude/skills/.

Скачать ZIP

Клонируйте репозиторий и скопируйте файлы навыка в свой проект.

git clone https://github.com/phaserjs/phaser/tree/master/skills/v4-new-features # Copy the skill folder to .claude/skills/ or .codex/skills/

Копировать Копировать
Быстрая настройка: Скопируйте папку со скиллом в каталог .claude/skills/ — Claude автоматически обнаружит и начнет использовать этот скилл
Репозиторий phaserjs/phaser

Похожие навыки

multica-creating-agents
Обновлено время 12 августа 2026 г.
tilemaps
Обновлено время 4 августа 2026 г.
agent-github-pr-manager
Обновлено время 3 августа 2026 г.
pixijs-application
Обновлено время 4 августа 2026 г.
OR