Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
chongdashu avatar

Phaser Gamedev

  • 44 installs
  • 83 repo stars
  • Updated January 23, 2026
  • chongdashu/phaserjs-oakwoods

Build 2D browser games with Phaser 3 covering scenes, sprites, physics, tilemaps, animations, and spritesheet loading.

About

Covers Phaser 3 game development including scene lifecycle, Arcade/Matter physics, tilemaps, and careful spritesheet loading. Used when a developer builds a 2D browser game with Phaser.

  • Scene, sprite, and physics architecture
  • Mandatory spritesheet inspection protocol

Phaser Gamedev by the numbers

  • 44 all-time installs (skills.sh)
  • Ranked #174 of 247 Game Development skills by installs in the Skillselion catalog
  • Data as of Jul 28, 2026 (Skillselion catalog sync)
npx skills add https://github.com/chongdashu/phaserjs-oakwoods --skill phaser-gamedev

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs44
repo stars83
Last updatedJanuary 23, 2026
Repositorychongdashu/phaserjs-oakwoods

What it does

Build 2D browser games with Phaser 3 covering scenes, sprites, physics, tilemaps, animations, and spritesheet loading.

Files

SKILL.mdMarkdownGitHub ↗

Phaser Game Development

Build 2D browser games using Phaser 3's scene-based architecture and physics systems.

---

STOP: Before Loading Any Spritesheet

Read [spritesheets-nineslice.md](references/spritesheets-nineslice.md) FIRST.

Spritesheet loading is fragile—a few pixels off causes silent corruption that compounds into broken visuals. The reference file contains the mandatory inspection protocol.

Quick rules (details in reference):

1. Measure the asset before writing loader code—never guess frame dimensions 2. Character sprites use SQUARE frames: If you calculate frameWidth=56, try 56 for height first 3. Different animations have different frame sizes: A run cycle needs wider frames than idle; an attack needs extra width for weapon swing. Measure EACH spritesheet independently 4. Check for spacing: Gaps between frames require spacing: N in loader config 5. Verify the math: imageWidth = (frameWidth × cols) + (spacing × (cols - 1))

---

Reference Files

Read these BEFORE working on the relevant feature:

When working on...Read first
Loading ANY spritesheetspritesheets-nineslice.md
Nine-slice UI panelsspritesheets-nineslice.md
Tiled tilemaps, collision layerstilemaps.md
Physics tuning, groups, poolingarcade-physics.md
Performance issues, object poolingperformance.md

---

Architecture Decisions (Make Early)

Physics System Choice

SystemUse When
ArcadePlatformers, shooters, most 2D games. Fast AABB collisions
MatterPhysics puzzles, ragdolls, realistic collisions. Slower, more accurate
NoneMenu scenes, visual novels, card games

Scene Structure

scenes/
├── BootScene.ts      # Asset loading, progress bar
├── MenuScene.ts      # Title screen, options
├── GameScene.ts      # Main gameplay
├── UIScene.ts        # HUD overlay (launched parallel)
└── GameOverScene.ts  # End screen, restart

Scene Transitions

this.scene.start('GameScene', { level: 1 });     // Stop current, start new
this.scene.launch('UIScene');                     // Run in parallel
this.scene.pause('GameScene');                    // Pause
this.scene.stop('UIScene');                       // Stop

---

Core Patterns

Game Configuration

const config: Phaser.Types.Core.GameConfig = {
  type: Phaser.AUTO,
  width: 800,
  height: 600,
  scale: {
    mode: Phaser.Scale.FIT,
    autoCenter: Phaser.Scale.CENTER_BOTH
  },
  physics: {
    default: 'arcade',
    arcade: { gravity: { y: 300 }, debug: false }
  },
  scene: [BootScene, MenuScene, GameScene]
};

Scene Lifecycle

class GameScene extends Phaser.Scene {
  init(data) { }      // Receive data from previous scene
  preload() { }       // Load assets (runs before create)
  create() { }        // Set up game objects, physics, input
  update(time, delta) { }  // Game loop, use delta for frame-rate independence
}

Frame-Rate Independent Movement

// CORRECT: scales with frame rate
this.player.x += this.speed * (delta / 1000);

// WRONG: varies with frame rate
this.player.x += this.speed;

---

Anti-Patterns

Anti-PatternProblemSolution
Global state on windowScene transitions break stateUse scene data, registries
Loading in create()Assets not ready when referencedLoad in preload(), use Boot scene
Frame countingGame speed varies with FPSUse delta / 1000
Matter for simple collisionsUnnecessary complexityArcade handles most 2D games
One giant sceneHard to extendSeparate gameplay/UI/menus
Magic numbersImpossible to balanceConfig objects, constants
No object poolingGC stuttersGroups with setActive(false)

---

Remember

Phaser provides powerful primitives—scenes, sprites, physics, input—but architecture is your responsibility.

Before coding: What scenes? What entities? How do they interact? What physics model?

Claude can build complete, polished Phaser games. These guidelines illuminate the path—they don't fence it.

Related skills

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.