v4-new-features
phaserjs/phaser
Phaser 4 で追加された新機能、ゲームオブジェクト、コンポーネント、およびレンダリング機能について学ぶ際に、このスキルを活用してください。フィルター、RenderNodes、CaptureFrame、Gradient、Noise、SpriteGPULayer、TilemapGPULayer、Lighting コンポーネント、RenderSteps、および新しいティントモードについて解説します。 トリガー:v4の新機能、Phaser 4の機能、RenderNode、SpriteGPULayer、CaptureFrame、Gradientゲームオブジェクト、Noiseゲームオブジェクト、新しいティントモード。v3のコードをv4に移行する場合は、代わりに「v3からv4への移行」スキルをご覧ください。
...すべて拡張します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 つのレンダリングタスクのみを処理するようになっています。
主な削除項目
主な追加機能
- 新しいGameObject:
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の向き: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-- トライアングルストリップのバッチ処理
サブミッター(オブジェクトタイプごとの座標レンダリング):
SubmitterQuad、SubmitterTile、SubmitterTileSpriteSubmitterSpriteGPULayer、SubmitterTilemapGPULayer
トランスフォーマー(頂点位置の計算):
TransformerImage、TransformerStamp、TransformerTile、TransformerTileSprite
テクスチャラー(テクスチャのバインディングを管理):
TexturerImage、TexturerTileSprite
フィルター(ポストプロセス —filters-and-postfx.md を参照):
BaseFilter、BaseFilterShaderFilterBarrel、FilterBlend、FilterBlocky、FilterBlur(Low/Med/Highのバリエーション)FilterBokeh、FilterColorMatrix、FilterCombineColorMatrixFilterDisplacement、FilterGlow、FilterGradientMap、FilterImageLightFilterKey、FilterMask、FilterNormalTools、FilterPanoramaBlurFilterParallelFilters、FilterPixelate、FilterQuantizeFilterSampler、FilterShadow、FilterThreshold、FilterVignette、FilterWipe
その他:
Camera、FillCamera、FillRect、FillPath、FillTriDrawLine、StrokePath、ShaderQuadListCompositor、RebindContext、YieldContextDynamicTextureHandler
拡張:カスタム 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));
主な詳細:
- 設定:
バンド、shapeMode、repeatMode、start、shape、ditherを指定した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 コンポーネント
ゲームオブジェクトに対して、defaultRenderNodes、customRenderNodes、および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リファレンス表、およびソースファイルマップについては、リファレンスガイドを参照してください。
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 variantBatchHandlerTileSprite-- TileSprite batchingBatchHandlerTriFlat-- flat triangle batching (Graphics, Shape)BatchHandlerPointLight-- point light batchingBatchHandlerStrip-- triangle strip batching
Submitters (coordinate rendering per object type):
SubmitterQuad,SubmitterTile,SubmitterTileSpriteSubmitterSpriteGPULayer,SubmitterTilemapGPULayer
Transformers (compute vertex positions):
TransformerImage,TransformerStamp,TransformerTile,TransformerTileSprite
Texturers (manage texture binding):
TexturerImage,TexturerTileSprite
Filters (post-processing -- see filters-and-postfx.md):
BaseFilter,BaseFilterShaderFilterBarrel,FilterBlend,FilterBlocky,FilterBlur(Low/Med/High variants)FilterBokeh,FilterColorMatrix,FilterCombineColorMatrixFilterDisplacement,FilterGlow,FilterGradientMap,FilterImageLightFilterKey,FilterMask,FilterNormalTools,FilterPanoramaBlurFilterParallelFilters,FilterPixelate,FilterQuantizeFilterSampler,FilterShadow,FilterThreshold,FilterVignette,FilterWipe
Other:
Camera,FillCamera,FillRect,FillPath,FillTriDrawLine,StrokePath,ShaderQuadListCompositor,RebindContext,YieldContextDynamicTextureHandler
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 = falsestops 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:
GradientQuadConfigwithbands,shapeMode,repeatMode,start,shape,dither - Colors defined via
ColorRampwithColorBandobjects (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 patternnoisePower-- 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/alphato 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
_renderStepsarray, executed viarenderWebGLStep() - First step runs first and is responsible for calling subsequent steps
- This is how Filters defer and control the
renderWebGLflow
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/
コピー





家
