Skip to main content

game-setup-and-config

Use this skill when creating a new Phaser 4 game instance or configuring GameConfig options. Covers renderer selection, canvas setup, scaling, pixel art, FPS settings, boot sequence, and all config sub-objects. Triggers on: new Phaser.Game, GameConfig, game setup, renderer, pixel art, FPS.

Informations de source

Dépôt
phaserjs/phaser
Dernière activité de la source
10 avril 2026 à 12:38
Langue détectée de SKILL.md
anglais
Étoiles
40 490
Forks
7 173

Options d'installation

Le prompt qui vérifie d'abord la source est sélectionné par défaut. Vous pouvez passer à une commande directe ou télécharger une copie locale.

Vérifiez les fichiers source

Lisez SKILL.md et les fichiers associés affichés par SkillsMP avant de décider de l'installer.

Affichage de SKILL.md

SKILL.md
Instructions source · Aperçu en lecture seule
name
game-setup-and-config
description
Use this skill when creating a new Phaser 4 game instance or configuring GameConfig options. Covers renderer selection, canvas setup, scaling, pixel art, FPS settings, boot sequence, and all config sub-objects. Triggers on: new Phaser.Game, GameConfig, game setup, renderer, pixel art, FPS.
# Game Setup and Config > How to create a Phaser.Game instance with the right GameConfig options for renderer, scaling, pixel art, FPS, and canvas placement. **Key source paths:** `src/core/Game.js`, `src/core/Config.js`, `src/core/typedefs/GameConfig.js`, `src/const.js`, `src/scale/const/` **Related skills:** ../scenes/SKILL.md, ../loading-assets/SKILL.md, ../scale-and-responsive/SKILL.md ## Quick Start The simplest possible Phaser 4 game -- a single scene with the default 1024×768 canvas: ```js class MyScene extends Phaser.Scene { preload() { this.load.image('logo', 'assets/logo.png'); } create() { this.add.image(400, 300, 'logo'); } } const config = { type: Phaser.AUTO, scene: MyScene }; const game = new Phaser.Game(config); ``` `new Phaser.Game(config)` triggers the entire boot sequence: config parsing (`Config`), renderer creation, DOM insertion, and the game loop (`TimeStep`). The game waits for `DOMContentLoaded` before booting. ## Core Concepts ### Boot Sequence (src/core/Game.js) 1. `new Phaser.Game(config)` -- parses config into a `Phaser.Core.Config` instance. 2. Creates global managers: `AnimationManager`, `TextureManager`, `CacheManager`, `InputManager`, `SceneManager`, `ScaleManager`, `SoundManager`, `TimeStep`, `PluginManager`. 3. Waits for `DOMContentLoaded`, then calls `boot()`. 4. `boot()` creates the renderer (`CreateRenderer`), adds the canvas to the DOM (`AddToDOM`), prints the debug header, emits `BOOT`. 5. Once textures are ready (`TextureManager` emits `READY`), emits `READY` then calls `start()`. 6. `start()` begins the `TimeStep` loop, sets up the `VisibilityHandler`, calls `config.postBoot`. ### Config Parsing (src/core/Config.js) The `Config` constructor reads a flat `GameConfig` object and resolves defaults. Some properties can be specified at top level OR nested inside sub-objects (e.g., `width` can be top-level or under `scale.width`). The `scale` sub-object takes priority when both are present. Render properties can likewise be top-level shortcuts (e.g., `pixelArt: true`) or nested under `render`. ### Renderer Constants (src/const.js) | Constant | Value | Behavior | |---|---|---| | `Phaser.AUTO` | `0` | WebGL if supported, else falls back to Canvas | | `Phaser.CANVAS` | `1` | Force Canvas renderer | | `Phaser.WEBGL` | `2` | Force WebGL -- no fallback if unsupported | | `Phaser.HEADLESS` | `3` | No renderer -- DOM still required. For unit testing only | Set via `config.type`. Default is `Phaser.AUTO`. ## Common Patterns ### Pixel Art Game When `pixelArt` is `true`, Config automatically sets `antialias: false`, `antialiasGL: false`, and `roundPixels: true`. ```js const config = { type: Phaser.AUTO, width: 320, height: 240, pixelArt: true, scale: { mode: Phaser.Scale.FIT, autoCenter: Phaser.Scale.CENTER_BOTH, zoom: Phaser.Scale.ZOOM_2X }, scene: MyScene }; ``` ### Smooth Pixel Art (WebGL only) Preserves blocky pixels but smooths edges between them when scaled up: ```js const config = { type: Phaser.WEBGL, width: 320, height: 240, smoothPixelArt: true, scene: MyScene }; ``` When `smoothPixelArt` is `true`, Config sets `antialias: true`, `antialiasGL: true`, and `pixelArt: false`. ### Full-Window Responsive Game ```js const config = { type: Phaser.AUTO, scale: { mode: Phaser.Scale.RESIZE, parent: 'game-container', width: '100%', height: '100%' }, scene: MyScene }; ``` ### Fixed Aspect Ratio with FIT ```js const config = { type: Phaser.AUTO, scale: { mode: Phaser.Scale.FIT, parent: 'game-container', autoCenter: Phaser.Scale.CENTER_BOTH, width: 1280, height: 720, min: { width: 640, height: 360 }, max: { width: 1920, height: 1080 } }, backgroundColor: '#2d2d2d', scene: MyScene }; ``` ### Custom FPS Limit ```js const config = { type: Phaser.AUTO, width: 800, height: 600, fps: { target: 60, limit: 30, forceSetTimeOut: false, smoothStep: true }, scene: MyScene }; ``` ### Transparent Canvas Over HTML ```js const config = { type: Phaser.AUTO, width: 800, height: 600, transparent: true, parent: 'game-container', scene: MyScene }; ``` When `transparent` is `true`, `backgroundColor` is forced to `0x000000` with alpha `0`. ### Pre-existing Canvas Element ```js const canvas = document.getElementById('my-canvas'); const config = { type: Phaser.WEBGL, canvas: canvas, width: 800, height: 600, scene: MyScene }; ``` ### Multiple Scenes ```js const config = { type: Phaser.AUTO, width: 800, height: 600, scene: [BootScene, PreloadScene, MenuScene, GameScene], physics: { default: 'arcade', arcade: { gravity: { y: 300 } } } }; ``` Only the first scene starts automatically. Others start only if they have `{ active: true }` in their scene config. See ../scenes/SKILL.md. ### Boot Callbacks ```js const config = { type: Phaser.AUTO, width: 800, height: 600, callbacks: { preBoot: function (game) { // Runs before Phaser boots. Game systems not yet available. }, postBoot: function (game) { // Runs after boot. All systems ready, game loop starting. } }, scene: MyScene }; ``` ### Disabling Input Subsystems ```js const config = { type: Phaser.AUTO, width: 800, height: 600, input: { keyboard: true, mouse: true, touch: false, gamepad: false, activePointers: 1, windowEvents: true }, disableContextMenu: true, scene: MyScene }; ``` ## Configuration Reference ### Top-Level GameConfig Properties | Property | Type | Default | Description | |---|---|---|---| | `type` | `number` | `Phaser.AUTO` (0) | Renderer: `AUTO`, `CANVAS`, `WEBGL`, or `HEADLESS` | | `width` | `number\|string` | `1024` | Game width in pixels (or `'100%'`). Overridden by `scale.width` | | `height` | `number\|string` | `768` | Game height in pixels (or `'100%'`). Overridden by `scale.height` | | `zoom` | `number` | `1` | Canvas zoom multiplier. Overridden by `scale.zoom` | | `parent` | `HTMLElement\|string\|null` | `undefined` | DOM element or `id` for canvas. `undefined` = document body. `null` = no parent | | `canvas` | `HTMLCanvasElement` | `null` | Provide your own canvas element | | `context` | `CanvasRenderingContext2D\|WebGLRenderingContext` | `null` | Provide your own rendering context | | `canvasStyle` | `string` | `null` | CSS styles applied to the canvas element | | `customEnvironment` | `boolean` | `false` | Skip feature detection for non-browser environments. `renderType` cannot be `AUTO` if `true` | | `scene` | `SceneType\|SceneType[]` | `null` | Scene class (extends Phaser.Scene) or array of scene classes | | `seed` | `string[]` | `[random]` | Seed for `Phaser.Math.RND` | | `title` | `string` | `''` | Game title shown in console banner | | `url` | `string` | `'https://phaser.io/...'` | Game URL shown in console banner | | `version` | `string` | `''` | Game version shown in console banner | | `autoFocus` | `boolean` | `true` | Auto-focus window on boot and mousedown | | `stableSort` | `number\|boolean` | `-1` | `-1` = auto-detect, `0`/`false` = built-in stable sort, `1`/`true` = rely on native ES2019 sort | | `disableContextMenu` | `boolean` | `false` | Disable right-click context menu | | `backgroundColor` | `string\|number` | `0x000000` | Canvas background color. Accepts hex number, CSS string, or color object | | `banner` | `boolean\|BannerConfig` | (shown) | `false` to hide console banner entirely | ### scale (Phaser.Types.Core.ScaleConfig) | Property | Type | Default | Description | |---|---|---|---| | `width` | `number\|string` | `1024` | Base game width | | `height` | `number\|string` | `768` | Base game height | | `zoom` | `number` | `1` | Zoom multiplier. Use constants: `NO_ZOOM` (1), `ZOOM_2X` (2), `ZOOM_4X` (4), `MAX_ZOOM` (-1) | | `parent` | `HTMLElement\|string` | `undefined` | DOM parent for the canvas | | `mode` | `number` | `Phaser.Scale.NONE` (0) | Scale mode (see table below) | | `expandParent` | `boolean` | `true` | Allow adjusting parent CSS height to 100% | | `autoRound` | `boolean` | `false` | Round display/style sizes for performance | | `autoCenter` | `number` | `NO_CENTER` (0) | Canvas centering mode (see table below) | | `resizeInterval` | `number` | `500` | Milliseconds between browser size checks | | `fullscreenTarget` | `HTMLElement\|string` | `null` | Element for fullscreen mode | | `min` | `{width, height}` | `{0, 0}` | Minimum canvas dimensions | | `max` | `{width, height}` | `{0, 0}` | Maximum canvas dimensions (0 = no limit) | | `snap` | `{width, height}` | `{0, 0}` | Snap canvas size to multiples | ### Scale Modes (src/scale/const/SCALE_MODE_CONST.js) | Constant | Value | Behavior | |---|---|---| | `Phaser.Scale.NONE` | `0` | No scaling. Canvas stays at config size | | `Phaser.Scale.WIDTH_CONTROLS_HEIGHT` | `1` | Height adjusts based on width | | `Phaser.Scale.HEIGHT_CONTROLS_WIDTH` | `2` | Width adjusts based on height | | `Phaser.Scale.FIT` | `3` | Fit inside parent keeping aspect ratio (letterboxing) | | `Phaser.Scale.ENVELOP` | `4` | Cover parent keeping aspect ratio (may overflow) | | `Phaser.Scale.RESIZE` | `5` | Canvas resizes to fill parent, ignoring aspect ratio | | `Phaser.Scale.EXPAND` | `6` | Like RESIZE for visible area + FIT for canvas scale | ### Center Modes (src/scale/const/CENTER_CONST.js) | Constant | Value | |---|---| | `Phaser.Scale.NO_CENTER` | `0` | | `Phaser.Scale.CENTER_BOTH` | `1` | | `Phaser.Scale.CENTER_HORIZONTALLY` | `2` | | `Phaser.Scale.CENTER_VERTICALLY` | `3` | ### Zoom Constants (src/scale/const/ZOOM_CONST.js) | Constant | Value | Behavior | |---|---|---| | `Phaser.Scale.NO_ZOOM` | `1` | No zoom | | `Phaser.Scale.ZOOM_2X` | `2` | 2x zoom | | `Phaser.Scale.ZOOM_4X` | `4` | 4x zoom | | `Phaser.Scale.MAX_ZOOM` | `-1` | Max integer zoom that fits in parent | ### render (Phaser.Types.Core.RenderConfig) These can be set at the top level OR nested under `render`. The `render` sub-object takes priority. | Property | Type | Default | Description |
Voir sur GitHub
Ce SKILL.md est tres volumineux, SkillsMP affiche donc ici seulement la premiere section. Voir sur GitHub