オプション
家 Skill その他 v4-new-features

v4-new-features

phaserjs/phaser phaserjs/phaser

Phaser 4 で追加された新機能、ゲームオブジェクト、コンポーネント、およびレンダリング機能について学ぶ際に、このスキルを活用してください。フィルター、RenderNodes、CaptureFrame、Gradient、Noise、SpriteGPULayer、TilemapGPULayer、Lighting コンポーネント、RenderSteps、および新しいティントモードについて解説します。 トリガー:v4の新機能、Phaser 4の機能、RenderNode、SpriteGPULayer、CaptureFrame、Gradientゲームオブジェクト、Noiseゲームオブジェクト、新しいティントモード。v3のコードをv4に移行する場合は、代わりに「v3からv4への移行」スキルをご覧ください。

...すべて拡張します
62
更新された時間 2026年8月4日

Phaser 4の新機能

Phaser 4 の新機能と新機能: フィルター(FX/BitmapMaskに代わる)、RenderNodes(パイプラインに代わる)、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からの移行をご検討中ですか?コードの変更手順、削除されたAPI、移行チェックリストについては、「v3からv4への移行ガイド」をご覧ください。

概要:v4での変更点

Phaser 4 は、WebGL レンダリングエンジンの全面的な刷新です。v3 のレンダラーでは、各サブシステムが WebGL 状態を個別に管理していたため、競合(例:特定のエフェクトがマスクを破損するなど)が発生していました。v4 では、RenderNode グラフを通じて WebGL 状態管理を一元化し、各ノードが正確に 1 つのレンダリングタスクのみを処理するようになっています。

主な削除項目

主な追加機能

  • 新しいGameObjectCaptureFrameGradientNoiseNoiseCell2D/3D/4DNoiseSimplex2D/3DSpriteGPULayerStampTilemapGPULayer
  • 新規コンポーネントLightingRenderStepsRenderNodes
  • 新しいティントモードMULTIPLYFILLADDSCREENOVERLAYHARD_LIGHT
  • 新しいフィルター:Blend、Blocky、CombineColorMatrix、GradientMap、ImageLight、Key、Mask、NormalTools、PanoramaBlur、ParallelFilters、Quantize、Sampler、Threshold
  • GLの向き:v4では標準のGLの向きを採用(テクスチャのY軸=0は下側)

フィルターシステム(FXおよびBitmapMaskに代わるもの)

完全なリファレンス:filters-and-postfx.md

フィルターは、v3のFXシステムとマスクシステムを統合したものです。すべてのフィルターは入力画像を受け取り、シェーダーパスを通じて出力画像を生成します。フィルターは任意のゲームオブジェクトやカメラに適用可能です。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);// v3 の方法 (BitmapMask):
constmask =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 には、デフォルトおよびカスタムのレンダノードマップがあります:
gameObject.defaultRenderNodes  // ロールごとの組み込みノード
gameObject.customRenderNodes   // ロールごとの上書き
gameObject.renderNodeData      // ノード名をキーとするデータ

カスタム RenderNodes の設定

// 特定のレンダリングロールを上書きする:
gameObject.setRenderNodeRole('Submitter','MyCustomSubmitter');// レンダリングノードにデータを渡す:
gameObject.setRenderNodeRole('Transformer','MyTransformer', {
    customProperty:42
});// カスタムノードを削除(デフォルトに戻ります):
gameObject.setRenderNodeRole('Submitter',null);

組み込みのレンダーノードタイプ

バッチハンドラ(1回の描画呼び出しにつき複数のオブジェクトを蓄積して描画):

  • BatchHandlerQuad-- 標準的なクワッドバッチ処理(Image、Sprite、BitmapTextなど)
  • BatchHandlerQuadSingle-- 単一クワッドのバリエーション
  • BatchHandlerTileSprite-- TileSpriteのバッチ処理
  • BatchHandlerTriFlat-- フラットな三角形のバッチ処理(Graphics、Shape)
  • BatchHandlerPointLight-- ポイントライトのバッチ処理
  • BatchHandlerStrip-- トライアングルストリップのバッチ処理

サブミッター(オブジェクトタイプごとの座標レンダリング):

  • SubmitterQuadSubmitterTileSubmitterTileSprite
  • SubmitterSpriteGPULayerSubmitterTilemapGPULayer

トランスフォーマー(頂点位置の計算):

  • TransformerImageTransformerStampTransformerTileTransformerTileSprite

テクスチャラー(テクスチャのバインディングを管理):

  • TexturerImageTexturerTileSprite

フィルター(ポストプロセス —filters-and-postfx.md を参照):

  • BaseFilterBaseFilterShader
  • FilterBarrelFilterBlendFilterBlockyFilterBlur(Low/Med/Highのバリエーション)
  • FilterBokehFilterColorMatrixFilterCombineColorMatrix
  • FilterDisplacementFilterGlowFilterGradientMapFilterImageLight
  • FilterKeyFilterMaskFilterNormalToolsFilterPanoramaBlur
  • FilterParallelFiltersFilterPixelateFilterQuantize
  • FilterSamplerFilterShadowFilterThresholdFilterVignetteFilterWipe

その他

  • CameraFillCameraFillRectFillPathFillTri
  • DrawLineStrokePathShaderQuad
  • ListCompositorRebindContextYieldContext
  • DynamicTextureHandler

拡張:カスタム RenderNodes

// カスタムノードコンストラクタを登録:
renderer.renderNodes.addNodeConstructor('MyNode',MyNodeClass);// または、あらかじめ作成されたノードインスタンスを追加:
renderer.renderNodes.addNode('MyNode', myNodeInstance);

新しいゲームオブジェクト

CaptureFrame

ディスプレイリスト内のその位置で、現在のフレームバッファの内容をテクスチャにキャプチャします。それ自体は何もレンダリングしません。WebGLのみ。

// ディスプレイリストのこの位置より上にあるすべての要素がキャプチャされます:
constimage1 =this.add.image(400,300,'background');// カメラでフレームバッファの使用を有効にします:
this.cameras.main.setForceComposite(true);// キャプチャポイントを生成します:
constcapture =this.add.captureFrame('myCapturedTexture');// キャプチャしたテクスチャ別のオブジェクトで使用:
constoverlay =this.add.image(400,300,'myCapturedTexture');
// オーバーレイにフィルターを追加して、キャプチャしたシーンを歪ませる

重要な注意点:

  • camera.setForceComposite(true)またはフレームバッファコンテキスト(フィルター、DynamicTexture、部分アルファ対応のカメラ)が必要です
  • フィルタが設定されたコンテナ内では、そのコンテナの内容のみがキャプチャされる
  • visible = falseに設定するとキャプチャが停止します
  • コンポーネント: BlendMode、Depth、RenderNodes、Visible

ソース:src/gameobjects/captureframe/CaptureFrame.js

グラデーション

GPUでレンダリングされた色のグラデーションを表示します。Shaderを継承しています。ColorBandオブジェクトを含む設定可能なColorRampを使用して、線形、放射状、およびその他の形状モードをサポートしています。

// 単純な線形グラデーション:
constgrad =this.add.gradient(undefined,100,100,200,200);// 複数のカラーバンドを持つ複雑な放射状グラデーション:
consthalo =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));

主な詳細:

  • 設定:バンドshapeModerepeatModestartshapeditherを指定したGradientQuadConfig
  • ColorRamp経由でColorBandオブジェクトを使用して定義された色(HSV、各種補間モードに対応)
  • 実行時にランプデータを変更した後、gradient.ramp.encode()を呼び出す

ソース:src/gameobjects/gradient/Gradient.js

ノイズ・ゲームオブジェクト

すべてのノイズタイプはShader を継承しており、WebGL 専用です。6 種類のバリエーションが利用可能です:

// 基本的なホワイトノイズ:
constnoise =this.add.noise({
    noiseOffset: [0,0],
    noisePower:1
},100,100,256,256);// カスタマイズ可能なセルラーノイズ:
constcells =this.add.noiseCell2D({
    noiseOffset: [0,0],
   noiseIterations:3,
    noiseNormalMap:true    // ライティング用の法線マップとして出力
},200,200,256,256);// 自然な効果のためのシンプレックスノイズ:
constsimplex =this.add.noiseSimplex2D({
    noiseFlow:0,           // これをアニメーションさせて変化させる
   noiseIterations:4,
    noiseWarpAmount:0.5,   // 乱流効果
    noiseSeed:42,
    noiseNormalMap:false
},300,300,256,256);

ノイズタイプに共通するプロパティ:

  • noiseOffset-- パターンをスクロールさせるための[x, y]配列
  • noisePower-- 出力レベルを調整(値が大きいほど高い値が抑制される)
  • noiseNormalMap-- 出力法線マップ(ライティング統合用)
  • noiseIterations-- ディテールレベル(セルラー/シンプレックス型)

数学的な対応関数:Phaser.Math.Hash(),Phaser.Math.HashCell(),Phaser.Math.HashSimplex()

ソース:src/gameobjects/noise/

SpriteGPULayer

データを静的GPUバッファに格納することで、1回の描画呼び出しで非常に多くのクワッド(最大数百万個)を描画します。個別のスプライトよりも最大100倍高速です。WebGLのみ対応。

constlayer =this.add.spriteGPULayer(texture, size);// size = メンバーの最大数// メンバーを追加(段階的にではなく、一度にまとめて行う):
constmember = {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);

重要な詳細:

  • テクスチャは1つだけ(マルチアトラス非対応)、レイヤーごとに1つの画像
  • メンバーは、作成時に定義されたトゥイーン風のアニメーション(フェード、バウンス、ウェーブ、カラーシフト)をサポート
  • バッファ内容の更新には負荷がかかるため、一度設定したら変更しないようにしてください
  • ピクセルアートでは、継ぎ目が目立たないように、2の冪乗サイズのテクスチャの使用を推奨
  • scaleX/scaleY/alphaを0に設定することで、メンバーを視覚的に「削除」できます(バッファの再構築を回避)
  • コンポーネント:Alpha、BlendMode、Depth、ElapseTimer、Lighting、Mask、RenderNodes、TextureCrop、Visible

ソースsrc/gameobjects/spritegpulayer/SpriteGPULayer.js


新しいコンポーネント

コンポーネントのリファレンス全文:game-object-components.md

Lighting コンポーネント

v3 でのライティングパイプラインの割り当て方式に代わるものです。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) {
    // ここにカスタムレンダリングロジックを記述
    // 準備ができたら次のステップを呼び出す:
   varnextFn = gameObject._renderSteps[renderStep +1];
    if(nextFn) {
        nextFn(renderer, gameObject, drawingContext, parentMatrix, renderStep +1, displayList, displayListIndex);
    }
});

重要な詳細:

  • ステップは_renderSteps配列に格納され、renderWebGLStep()を通じて実行されます
  • 最初のステップが最初に実行され、後続のステップを呼び出す役割を担う
  • このようにして、フィルタはrenderWebGLのフローを遅延させ、制御します

出典:src/gameobjects/components/RenderSteps.js

RenderNodes コンポーネント

ゲームオブジェクトに対して、defaultRenderNodescustomRenderNodes、およびrenderNodeDataマップを提供します。使用方法については、上記の「RenderNodes」セクションを参照してください。

ソースsrc/gameobjects/components/RenderNodes.js


TilemapGPULayer

タイルマップの完全なリファレンス:tilemaps.md

高性能な GPU ベースのタイルマップレンダリング。専用のシェーダーを使用して、レイヤー全体を単一のクワッドとしてレンダリングします。WebGL のみ対応。

// gpuフラグを指定してTilemapで作成:
constmap =this.make.tilemap({key:'level1'});
consttileset = map.addTilesetImage('tiles','tilesImage');
constgpuLayer = map.createLayer('Ground', tileset,0,0,true);  // 最後の引数: gpu = true

機能:

  • 単一のテクスチャ画像を持つ単一のタイルセット
  • 最大4096x4096タイル、最大2^23個のユニークなタイルID
  • タイルの反転およびアニメーションに対応
  • 正投影タイルマップのみ(アイソメトリック/六角形は非対応)
  • LINEARモードでの完璧なテクスチャフィルタリング(タイルの継ぎ目なし)
  • コストはタイル単位ではなくピクセル単位――表示されるタイル数が増えてもパフォーマンスの低下なし

制限事項:

  • 複数のタイルセットは使用不可
  • 編集後は、更新のために手動でgenerateLayerDataTexture()を呼び出す必要があります
  • 正投影のみ

内部データ:タイルデータはテクスチャに格納されます(1タイルあたり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/

コピー コピー
クイックセットアップ: skill フォルダを .claude/skills/ にコピーすると、Claude が自動的にそのスキルを検出して使用します。
リポジトリ phaserjs/phaser

関連スキル

multica-creating-agents
更新された時間 2026年8月12日
tilemaps
更新された時間 2026年8月4日
agent-github-pr-manager
更新された時間 2026年8月3日
pixijs-application
更新された時間 2026年8月4日
OR