Konfiguracja
EngineConfig — wszystkie pola konfiguracji silnika z wartościami domyślnymi, walidacją i przykładami dla typowych setupów.
EngineConfig#
Konfigurację przekazujesz do createEngine(options). Nieprawidłowa konfiguracja rzuca Error z czytelnym komunikatem — walidacja jest synchroniczna i fail-fast.
| Pole | Typ | Domyślnie | Opis |
|---|---|---|---|
parent | string | HTMLElement | wymagane | Kontener gry |
width, height | number | 1280, 720 | Rozmiar logiczny planszy |
backgroundColor | string | number | "#151515" | Tło planszy |
scaleMode | "fit" | "fill" | "fixed" | "expand" | "fit" | Skalowanie do kontenera |
debug | boolean | false | Nakładka debug + poziom logowania debug |
pauseOnHidden | boolean | true | Pauza, gdy karta jest ukryta |
maxDeltaTime | number | 0.1 | Górny clamp deltaTime w sekundach |
seed | number | 1337 | Seed generatora Random |
fixedStep | { hz: number; maxSteps?: number } | brak | Krok stały → Scene.fixedUpdate(dt) |
input | InputActionMap | defaultInputMap | Mapowanie akcji na klawisze |
physics | { enabled, gravity, debug } | enabled: true | Fizyka Arcade |
wasm | { wasmUrl, required? } | brak | Opcjonalny moduł WASM |
EngineOptions = EngineConfig + logLevel?: LogLevel + wasm?: WasmBridgeOptions.
Domyślne mapowanie akcji#
defaultInputMap definiuje akcje: move-up, move-down, move-left, move-right, interact, jump, restart, menu, pause, time-slow, time-fast, time-normal, mute.
Logika gry czyta akcje, nie kody klawiszy — dzięki temu remapowanie nie dotyka kodu rozgrywki:
const engine = createEngine({
parent: 'app',
input: {
'move-left': ['KeyA', 'ArrowLeft'],
'move-right': ['KeyD', 'ArrowRight'],
jump: ['Space', 'KeyW'],
interact: ['KeyE']
}
})
engine.getInput().remapAction('jump', ['Space'])
Przykładowe setupy#
Gra pixel-art z krokiem stałym#
const engine = createEngine({
parent: 'game',
width: 480,
height: 270,
scaleMode: 'fit',
backgroundColor: '#1a1c2c',
fixedStep: { hz: 60, maxSteps: 5 },
seed: 20260,
physics: { enabled: true, gravity: { x: 0, y: 900 } }
})
Gra bez fizyki, z własnym seedem#
const engine = createEngine({
parent: 'app',
width: 1024,
height: 768,
physics: { enabled: false },
seed: 42,
pauseOnHidden: true
})
Tryb debug z pełną diagnostyką#
const engine = createEngine({
parent: 'app',
debug: true,
logLevel: 'debug',
physics: { enabled: true, debug: true }
})
Skalowanie#
| Tryb | Zachowanie |
|---|---|
fit | Zachowuje proporcje, mieści całość w kontenerze (letterbox) |
fill | Wypełnia kontener, może przyciąć krawędzie |
fixed | Stały rozmiar logiczny, bez skalowania |
expand | Rozszerza planszę do rozmiaru kontenera |
Wskazówka
Dla gier z pixel-artem używaj fit i niskiej rozdzielczości logicznej (np. 480×270) — skalowanie zajmie się przeglądarka, a fizyka pozostanie deterministyczna.
Zmiana konfiguracji w locie#
Część ustawień zmienisz bez restartu:
engine.setTimeScale(0.5)
engine.setDebug(true)
engine.pause()
engine.resume()
setTimeScale wpływa na deltaTime całej gry (patrz Czas), ale nie na czas rzeczywisty — realElapsed płynie dalej.