plugins/lisa-phaser/skills/phaser-gameobjects/SKILL.md
This skill should be used when creating or managing Phaser 4 GameObjects — sprites, images, text, containers, groups and object pooling, animations (anims), tweens, particles, and the v4 GPU layers (SpriteGPULayer, TilemapGPULayer) for massive object counts. Use it when adding entities, fixing per-frame allocation/GC issues, pooling projectiles, or choosing between a Container and a Group. Pairs with phaser-scenes, phaser-physics, phaser-rendering, and phaser-assets.
npx skillsauth add codyswanngt/lisa phaser-gameobjectsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
GameObjects carry over from Phaser 3 largely unchanged: Sprite, Image,
Text, BitmapText, Container, Group, Graphics, the Shape objects, and
the particle system. v4 adds Gradient, Stamp, CaptureFrame, the Noise
objects, NineSlice tiling (tileX/tileY), and — the headline — the GPU
layers. Removed: Mesh, Plane, the OBJ loader, Camera3D/Layer3D
([[phaser-v3-migration]]).
Layer is a true GameObject and is the right tool
for z-grouping with filters.BitmapText.Bullets, enemies, particles, pickups: never new/destroy per spawn — pool
through a Group:
this.bullets = this.add.group({ classType: Bullet, maxSize: 64, runChildUpdate: true });
// spawn
const b = this.bullets.get(x, y, Tex.GameAtlas, "bullet") as Bullet | null;
if (b) { b.setActive(true).setVisible(true); b.fire(dir); }
// despawn (inside Bullet when off-screen/expired)
this.bullets.killAndHide(this); this.body.enable = false;
maxSize caps the pool; get() returns null when exhausted — handle it
(drop the spawn) rather than growing unbounded.
In update() paths: no object literals, no array spreads, no .map/.filter
chains, no closures. Hoist scratch Vector2s and reuse them. The GC pause from
per-frame garbage is the most common cause of stutter that profilers get blamed
for.
create or a dedicated module) on the
global this.anims; play by key constant: sprite.play(Anim.Run).this.tweens.add) and Timelines carry over from v3 unchanged. Kill
tweens that target objects you pool/despawn — a tween holding a pooled object
alive is a classic leak.New in v4 — reach for these instead of "thousands of sprites":
Regular Sprites + Groups remain correct for interactive entities (things with bodies, input, per-entity logic).
The particle API is the v3.60-style this.add.particles(x, y, texture, config)
emitter manager. v4 additions: particles respect the lighting system. Pool
explosion-style one-shot emitters or use emitter.explode() rather than
creating emitters per event.
Bullet extends Phaser.Physics.Arcade.Sprite) live in
src/entities/, take their tunables from src/logic/ config objects, and use
asset-key constants ([[phaser-assets]]).Depth.World, Depth.FX,
Depth.UI), not scattered magic numbers.Object-lifecycle changes are verified in the running game: spawn/despawn the
entity repeatedly and watch the object count (this.children.length,
group.getLength()) stay bounded, and the FPS meter stay flat — an unbounded
count or sawtooth memory profile means the pool or tween cleanup is wrong.
tools
--- name: harper-realtime description: This skill should be used when adding or troubleshooting Harper (HarperDB/Fabric) real-time behavior: MQTT topics, WebSocket resource subscriptions, resource publish/subscribe handlers, SSE-style streaming routes, and local subscriber verification. Pairs with harper-resources, harper-config-yaml, harper-schema-graphql, and harper-build-and-deploy. --- # Harper Realtime ## Overview Harper exposes live data through the same Resource model used for REST and
tools
--- name: harper-realtime description: This skill should be used when adding or troubleshooting Harper (HarperDB/Fabric) real-time behavior: MQTT topics, WebSocket resource subscriptions, resource publish/subscribe handlers, SSE-style streaming routes, and local subscriber verification. Pairs with harper-resources, harper-config-yaml, harper-schema-graphql, and harper-build-and-deploy. --- # Harper Realtime ## Overview Harper exposes live data through the same Resource model used for REST and
tools
--- name: harper-realtime description: This skill should be used when adding or troubleshooting Harper (HarperDB/Fabric) real-time behavior: MQTT topics, WebSocket resource subscriptions, resource publish/subscribe handlers, SSE-style streaming routes, and local subscriber verification. Pairs with harper-resources, harper-config-yaml, harper-schema-graphql, and harper-build-and-deploy. --- # Harper Realtime ## Overview Harper exposes live data through the same Resource model used for REST and
tools
--- name: harper-realtime description: This skill should be used when adding or troubleshooting Harper (HarperDB/Fabric) real-time behavior: MQTT topics, WebSocket resource subscriptions, resource publish/subscribe handlers, SSE-style streaming routes, and local subscriber verification. Pairs with harper-resources, harper-config-yaml, harper-schema-graphql, and harper-build-and-deploy. --- # Harper Realtime ## Overview Harper exposes live data through the same Resource model used for REST and