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.

소스 정보

저장소
phaserjs/phaser
최근 소스 활동
2026년 4월 10일 12:38
감지된 SKILL.md 언어
영어
스타
40,490
포크
7,173

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
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 |
GitHub에서 보기
이 SKILL.md는 매우 커서 SkillsMP가 여기에는 첫 섹션만 미리 보여줍니다. GitHub에서 보기