[{"data":1,"prerenderedAt":1415},["ShallowReactive",2],{"doc:\u002Fgame-engine\u002Fgetting-started":3,"surround:\u002Fgame-engine\u002Fgetting-started":1171,"navigation":1182},{"id":4,"title":5,"body":6,"description":1164,"extension":1165,"meta":1166,"navigation":164,"path":1167,"seo":1168,"stem":1169,"__hash__":1170},"docs\u002F01.game-engine\u002F02.getting-started.md","Szybki start",{"type":7,"value":8,"toc":1154},"minimark",[9,14,27,31,124,128,136,406,413,510,527,531,537,685,688,801,809,813,827,845,849,852,879,893,897,900,1023,1034,1038,1150],[10,11,13],"h2",{"id":12},"wymagania","Wymagania",[15,16,17,24],"ul",{},[18,19,20],"li",{},[21,22,23],"strong",{},"Node.js ≥ 20",[18,25,26],{},"npm (projekt używa workspaces)",[10,28,30],{"id":29},"instalacja-i-uruchomienie","Instalacja i uruchomienie",[32,33,34],"steps",{},[35,36,37,65,97],"ol",{},[18,38,39,42],{},[21,40,41],{},"Zainstaluj zależności",[43,44,49],"pre",{"className":45,"code":46,"language":47,"meta":48,"style":48},"language-bash shiki shiki-themes github-light github-dark","npm install\n","bash","",[50,51,52],"code",{"__ignoreMap":48},[53,54,57,61],"span",{"class":55,"line":56},"line",1,[53,58,60],{"class":59},"sScJk","npm",[53,62,64],{"class":63},"sZZnC"," install\n",[18,66,67,70,85,88,89,92,93,96],{},[21,68,69],{},"Uruchom serwer deweloperski",[43,71,73],{"className":45,"code":72,"language":47,"meta":48,"style":48},"npm run dev\n",[50,74,75],{"__ignoreMap":48},[53,76,77,79,82],{"class":55,"line":56},[53,78,60],{"class":59},[53,80,81],{"class":63}," run",[53,83,84],{"class":63}," dev\n",[86,87],"br",{},"Vite uruchamia ",[50,90,91],{},"apps\u002Fplayground"," pod ",[50,94,95],{},"http:\u002F\u002Flocalhost:5173",". Przykładowa gra ładuje się z menu do rozgrywki.",[18,98,99,102],{},[21,100,101],{},"Uruchom testy i typecheck",[43,103,105],{"className":45,"code":104,"language":47,"meta":48,"style":48},"npm test\nnpm run typecheck\n",[50,106,107,114],{"__ignoreMap":48},[53,108,109,111],{"class":55,"line":56},[53,110,60],{"class":59},[53,112,113],{"class":63}," test\n",[53,115,117,119,121],{"class":55,"line":116},2,[53,118,60],{"class":59},[53,120,81],{"class":63},[53,122,123],{"class":63}," typecheck\n",[10,125,127],{"id":126},"pierwsza-scena","Pierwsza scena",[129,130,131,132,135],"p",{},"Utwórz plik ",[50,133,134],{},"apps\u002Fplayground\u002Fsrc\u002Fscenes\u002FMyScene.ts",":",[43,137,142],{"className":138,"code":139,"filename":140,"language":141,"meta":48,"style":48},"language-ts shiki shiki-themes github-light github-dark","import { Scene } from '@engine'\n\nexport class MyScene extends Scene {\n  constructor() {\n    super('my')\n  }\n\n  create() {\n    this.createText('hello', 640, 360, 'Cześć!', { fontSize: '24px', color: '#fff' })\n      .setOrigin(0.5, 0.5)\n  }\n\n  update(dt: number) {\n    if (this.getInput().isActionPressed('interact')) {\n      this.getEvents().emit('request:scene', { to: 'game' })\n    }\n  }\n}\n","MyScene.ts","ts",[50,143,144,160,166,187,196,212,218,223,231,279,299,304,309,329,360,389,395,400],{"__ignoreMap":48},[53,145,146,150,154,157],{"class":55,"line":56},[53,147,149],{"class":148},"szBVR","import",[53,151,153],{"class":152},"sVt8B"," { Scene } ",[53,155,156],{"class":148},"from",[53,158,159],{"class":63}," '@engine'\n",[53,161,162],{"class":55,"line":116},[53,163,165],{"emptyLinePlaceholder":164},true,"\n",[53,167,169,172,175,178,181,184],{"class":55,"line":168},3,[53,170,171],{"class":148},"export",[53,173,174],{"class":148}," class",[53,176,177],{"class":59}," MyScene",[53,179,180],{"class":148}," extends",[53,182,183],{"class":59}," Scene",[53,185,186],{"class":152}," {\n",[53,188,190,193],{"class":55,"line":189},4,[53,191,192],{"class":148},"  constructor",[53,194,195],{"class":152},"() {\n",[53,197,199,203,206,209],{"class":55,"line":198},5,[53,200,202],{"class":201},"sj4cs","    super",[53,204,205],{"class":152},"(",[53,207,208],{"class":63},"'my'",[53,210,211],{"class":152},")\n",[53,213,215],{"class":55,"line":214},6,[53,216,217],{"class":152},"  }\n",[53,219,221],{"class":55,"line":220},7,[53,222,165],{"emptyLinePlaceholder":164},[53,224,226,229],{"class":55,"line":225},8,[53,227,228],{"class":59},"  create",[53,230,195],{"class":152},[53,232,234,237,240,243,245,248,251,254,256,259,261,264,267,270,273,276],{"class":55,"line":233},9,[53,235,236],{"class":201},"    this",[53,238,239],{"class":152},".",[53,241,242],{"class":59},"createText",[53,244,205],{"class":152},[53,246,247],{"class":63},"'hello'",[53,249,250],{"class":152},", ",[53,252,253],{"class":201},"640",[53,255,250],{"class":152},[53,257,258],{"class":201},"360",[53,260,250],{"class":152},[53,262,263],{"class":63},"'Cześć!'",[53,265,266],{"class":152},", { fontSize: ",[53,268,269],{"class":63},"'24px'",[53,271,272],{"class":152},", color: ",[53,274,275],{"class":63},"'#fff'",[53,277,278],{"class":152}," })\n",[53,280,282,285,288,290,293,295,297],{"class":55,"line":281},10,[53,283,284],{"class":152},"      .",[53,286,287],{"class":59},"setOrigin",[53,289,205],{"class":152},[53,291,292],{"class":201},"0.5",[53,294,250],{"class":152},[53,296,292],{"class":201},[53,298,211],{"class":152},[53,300,302],{"class":55,"line":301},11,[53,303,217],{"class":152},[53,305,307],{"class":55,"line":306},12,[53,308,165],{"emptyLinePlaceholder":164},[53,310,312,315,317,321,323,326],{"class":55,"line":311},13,[53,313,314],{"class":59},"  update",[53,316,205],{"class":152},[53,318,320],{"class":319},"s4XuR","dt",[53,322,135],{"class":148},[53,324,325],{"class":201}," number",[53,327,328],{"class":152},") {\n",[53,330,332,335,338,341,343,346,349,352,354,357],{"class":55,"line":331},14,[53,333,334],{"class":148},"    if",[53,336,337],{"class":152}," (",[53,339,340],{"class":201},"this",[53,342,239],{"class":152},[53,344,345],{"class":59},"getInput",[53,347,348],{"class":152},"().",[53,350,351],{"class":59},"isActionPressed",[53,353,205],{"class":152},[53,355,356],{"class":63},"'interact'",[53,358,359],{"class":152},")) {\n",[53,361,363,366,368,371,373,376,378,381,384,387],{"class":55,"line":362},15,[53,364,365],{"class":201},"      this",[53,367,239],{"class":152},[53,369,370],{"class":59},"getEvents",[53,372,348],{"class":152},[53,374,375],{"class":59},"emit",[53,377,205],{"class":152},[53,379,380],{"class":63},"'request:scene'",[53,382,383],{"class":152},", { to: ",[53,385,386],{"class":63},"'game'",[53,388,278],{"class":152},[53,390,392],{"class":55,"line":391},16,[53,393,394],{"class":152},"    }\n",[53,396,398],{"class":55,"line":397},17,[53,399,217],{"class":152},[53,401,403],{"class":55,"line":402},18,[53,404,405],{"class":152},"}\n",[129,407,408,409,412],{},"Zarejestruj scenę w ",[50,410,411],{},"main.ts"," i wystartuj ją:",[43,414,416],{"className":138,"code":415,"filename":411,"language":141,"meta":48,"style":48},"import { createEngine } from '@engine'\nimport { MyScene } from '.\u002Fscenes\u002FMyScene'\n\nconst engine = createEngine({ parent: 'app', width: 1280, height: 720 })\nengine.registerScene(new MyScene())\nengine.start('my')\n",[50,417,418,429,441,445,479,497],{"__ignoreMap":48},[53,419,420,422,425,427],{"class":55,"line":56},[53,421,149],{"class":148},[53,423,424],{"class":152}," { createEngine } ",[53,426,156],{"class":148},[53,428,159],{"class":63},[53,430,431,433,436,438],{"class":55,"line":116},[53,432,149],{"class":148},[53,434,435],{"class":152}," { MyScene } ",[53,437,156],{"class":148},[53,439,440],{"class":63}," '.\u002Fscenes\u002FMyScene'\n",[53,442,443],{"class":55,"line":168},[53,444,165],{"emptyLinePlaceholder":164},[53,446,447,450,453,456,459,462,465,468,471,474,477],{"class":55,"line":189},[53,448,449],{"class":148},"const",[53,451,452],{"class":201}," engine",[53,454,455],{"class":148}," =",[53,457,458],{"class":59}," createEngine",[53,460,461],{"class":152},"({ parent: ",[53,463,464],{"class":63},"'app'",[53,466,467],{"class":152},", width: ",[53,469,470],{"class":201},"1280",[53,472,473],{"class":152},", height: ",[53,475,476],{"class":201},"720",[53,478,278],{"class":152},[53,480,481,484,487,489,492,494],{"class":55,"line":198},[53,482,483],{"class":152},"engine.",[53,485,486],{"class":59},"registerScene",[53,488,205],{"class":152},[53,490,491],{"class":148},"new",[53,493,177],{"class":59},[53,495,496],{"class":152},"())\n",[53,498,499,501,504,506,508],{"class":55,"line":214},[53,500,483],{"class":152},[53,502,503],{"class":59},"start",[53,505,205],{"class":152},[53,507,208],{"class":63},[53,509,211],{"class":152},[511,512,514],"callout",{"type":513},"info",[129,515,516,517,250,520,250,523,526],{},"Scena dostaje menedżery przez gettery (",[50,518,519],{},"getInput()",[50,521,522],{},"getAudio()",[50,524,525],{},"getTweens()","…), a nie przez globalny stan. Dzięki temu scenę można testować w izolacji.",[10,528,530],{"id":529},"konfiguracja-projektu-json","Konfiguracja projektu JSON",[129,532,533,534,135],{},"Silnik czyta wersjonowany format projektu. Utwórz ",[50,535,536],{},"project.json",[43,538,542],{"className":539,"code":540,"filename":536,"language":541,"meta":48,"style":48},"language-json shiki shiki-themes github-light github-dark","{\n  \"formatVersion\": 2,\n  \"name\": \"MyGame\",\n  \"game\": {\n    \"width\": 1280,\n    \"height\": 720,\n    \"scaleMode\": \"fit\",\n    \"backgroundColor\": \"#0f1419\"\n  },\n  \"assets\": [\n    { \"id\": \"hero\", \"type\": \"image\", \"src\": \"\u002Fassets\u002Fhero.png\" }\n  ]\n}\n","json",[50,543,544,549,563,575,583,594,605,617,627,632,640,676,681],{"__ignoreMap":48},[53,545,546],{"class":55,"line":56},[53,547,548],{"class":152},"{\n",[53,550,551,554,557,560],{"class":55,"line":116},[53,552,553],{"class":201},"  \"formatVersion\"",[53,555,556],{"class":152},": ",[53,558,559],{"class":201},"2",[53,561,562],{"class":152},",\n",[53,564,565,568,570,573],{"class":55,"line":168},[53,566,567],{"class":201},"  \"name\"",[53,569,556],{"class":152},[53,571,572],{"class":63},"\"MyGame\"",[53,574,562],{"class":152},[53,576,577,580],{"class":55,"line":189},[53,578,579],{"class":201},"  \"game\"",[53,581,582],{"class":152},": {\n",[53,584,585,588,590,592],{"class":55,"line":198},[53,586,587],{"class":201},"    \"width\"",[53,589,556],{"class":152},[53,591,470],{"class":201},[53,593,562],{"class":152},[53,595,596,599,601,603],{"class":55,"line":214},[53,597,598],{"class":201},"    \"height\"",[53,600,556],{"class":152},[53,602,476],{"class":201},[53,604,562],{"class":152},[53,606,607,610,612,615],{"class":55,"line":220},[53,608,609],{"class":201},"    \"scaleMode\"",[53,611,556],{"class":152},[53,613,614],{"class":63},"\"fit\"",[53,616,562],{"class":152},[53,618,619,622,624],{"class":55,"line":225},[53,620,621],{"class":201},"    \"backgroundColor\"",[53,623,556],{"class":152},[53,625,626],{"class":63},"\"#0f1419\"\n",[53,628,629],{"class":55,"line":233},[53,630,631],{"class":152},"  },\n",[53,633,634,637],{"class":55,"line":281},[53,635,636],{"class":201},"  \"assets\"",[53,638,639],{"class":152},": [\n",[53,641,642,645,648,650,653,655,658,660,663,665,668,670,673],{"class":55,"line":301},[53,643,644],{"class":152},"    { ",[53,646,647],{"class":201},"\"id\"",[53,649,556],{"class":152},[53,651,652],{"class":63},"\"hero\"",[53,654,250],{"class":152},[53,656,657],{"class":201},"\"type\"",[53,659,556],{"class":152},[53,661,662],{"class":63},"\"image\"",[53,664,250],{"class":152},[53,666,667],{"class":201},"\"src\"",[53,669,556],{"class":152},[53,671,672],{"class":63},"\"\u002Fassets\u002Fhero.png\"",[53,674,675],{"class":152}," }\n",[53,677,678],{"class":55,"line":306},[53,679,680],{"class":152},"  ]\n",[53,682,683],{"class":55,"line":311},[53,684,405],{"class":152},[129,686,687],{},"Załaduj i zweryfikuj go w kodzie:",[43,689,691],{"className":138,"code":690,"language":141,"meta":48,"style":48},"import { parseProjectJson } from '@engine'\n\nconst res = parseProjectJson(await fetch('\u002Fproject.json').then((r) => r.text()))\nif (!res.valid) throw new Error(res.errors.join('\\n'))\n",[50,692,693,704,708,760],{"__ignoreMap":48},[53,694,695,697,700,702],{"class":55,"line":56},[53,696,149],{"class":148},[53,698,699],{"class":152}," { parseProjectJson } ",[53,701,156],{"class":148},[53,703,159],{"class":63},[53,705,706],{"class":55,"line":116},[53,707,165],{"emptyLinePlaceholder":164},[53,709,710,712,715,717,720,722,725,728,730,733,736,739,742,745,748,751,754,757],{"class":55,"line":168},[53,711,449],{"class":148},[53,713,714],{"class":201}," res",[53,716,455],{"class":148},[53,718,719],{"class":59}," parseProjectJson",[53,721,205],{"class":152},[53,723,724],{"class":148},"await",[53,726,727],{"class":59}," fetch",[53,729,205],{"class":152},[53,731,732],{"class":63},"'\u002Fproject.json'",[53,734,735],{"class":152},").",[53,737,738],{"class":59},"then",[53,740,741],{"class":152},"((",[53,743,744],{"class":319},"r",[53,746,747],{"class":152},") ",[53,749,750],{"class":148},"=>",[53,752,753],{"class":152}," r.",[53,755,756],{"class":59},"text",[53,758,759],{"class":152},"()))\n",[53,761,762,765,767,770,773,776,779,782,785,788,790,793,796,798],{"class":55,"line":189},[53,763,764],{"class":148},"if",[53,766,337],{"class":152},[53,768,769],{"class":148},"!",[53,771,772],{"class":152},"res.valid) ",[53,774,775],{"class":148},"throw",[53,777,778],{"class":148}," new",[53,780,781],{"class":59}," Error",[53,783,784],{"class":152},"(res.errors.",[53,786,787],{"class":59},"join",[53,789,205],{"class":152},[53,791,792],{"class":63},"'",[53,794,795],{"class":201},"\\n",[53,797,792],{"class":63},[53,799,800],{"class":152},"))\n",[129,802,803,804,239],{},"Pełny opis formatu znajdziesz w ",[805,806,808],"a",{"href":807},"\u002Fgame-engine\u002Fdata\u002Fproject-format","Formacie projektu",[10,810,812],{"id":811},"build-produkcyjny","Build produkcyjny",[43,814,816],{"className":45,"code":815,"language":47,"meta":48,"style":48},"npm run build\n",[50,817,818],{"__ignoreMap":48},[53,819,820,822,824],{"class":55,"line":56},[53,821,60],{"class":59},[53,823,81],{"class":63},[53,825,826],{"class":63}," build\n",[129,828,829,830,833,834,337,837,840,841,239],{},"Statyczne pliki trafiają do ",[50,831,832],{},"dist\u002F"," — wrzuć je na dowolny hosting (Netlify, Vercel, S3, GitHub Pages). Build używa ",[21,835,836],{},"względnych ścieżek",[50,838,839],{},"base: '.\u002F'","), więc gra działa też w podkatalogu. Szczegóły i gotowe konfiguracje hostingu: ",[805,842,844],{"href":843},"\u002Fgame-engine\u002Fdeployment","Wdrożenie",[10,846,848],{"id":847},"debugowanie","Debugowanie",[129,850,851],{},"Włącz nakładkę debug w konfiguracji:",[43,853,855],{"className":138,"code":854,"language":141,"meta":48,"style":48},"const engine = createEngine({ parent: 'app', debug: true })\n",[50,856,857],{"__ignoreMap":48},[53,858,859,861,863,865,867,869,871,874,877],{"class":55,"line":56},[53,860,449],{"class":148},[53,862,452],{"class":201},[53,864,455],{"class":148},[53,866,458],{"class":59},[53,868,461],{"class":152},[53,870,464],{"class":63},[53,872,873],{"class":152},", debug: ",[53,875,876],{"class":201},"true",[53,878,278],{"class":152},[129,880,881,882,885,886,889,890,239],{},"Overlay pokazuje FPS, czas klatki, liczbę obiektów, ciał fizyki i pamięć. ",[50,883,884],{},"pauseOnHidden: true"," (domyślnie) clampuje ",[50,887,888],{},"deltaTime"," po powrocie z innej karty. Więcej: ",[805,891,848],{"href":892},"\u002Fgame-engine\u002Fadvanced\u002Fdebugging",[10,894,896],{"id":895},"opcjonalny-wasm","Opcjonalny WASM",[129,898,899],{},"Jeśli potrzebujesz ciężkiego compute (np. pathfinding A*):",[43,901,903],{"className":138,"code":902,"language":141,"meta":48,"style":48},"const engine = createEngine({\n  parent: 'app',\n  width: 800,\n  height: 600,\n  wasm: { wasmUrl: '\u002Fwasm\u002Fcore.wasm', required: false }\n})\n\nawait engine.getWasm().load()\nconst path = engine.getWasm().call\u003CVec2i[]>('findPathAStar', grid, start, goal)\n",[50,904,905,918,927,937,947,963,968,972,990],{"__ignoreMap":48},[53,906,907,909,911,913,915],{"class":55,"line":56},[53,908,449],{"class":148},[53,910,452],{"class":201},[53,912,455],{"class":148},[53,914,458],{"class":59},[53,916,917],{"class":152},"({\n",[53,919,920,923,925],{"class":55,"line":116},[53,921,922],{"class":152},"  parent: ",[53,924,464],{"class":63},[53,926,562],{"class":152},[53,928,929,932,935],{"class":55,"line":168},[53,930,931],{"class":152},"  width: ",[53,933,934],{"class":201},"800",[53,936,562],{"class":152},[53,938,939,942,945],{"class":55,"line":189},[53,940,941],{"class":152},"  height: ",[53,943,944],{"class":201},"600",[53,946,562],{"class":152},[53,948,949,952,955,958,961],{"class":55,"line":198},[53,950,951],{"class":152},"  wasm: { wasmUrl: ",[53,953,954],{"class":63},"'\u002Fwasm\u002Fcore.wasm'",[53,956,957],{"class":152},", required: ",[53,959,960],{"class":201},"false",[53,962,675],{"class":152},[53,964,965],{"class":55,"line":214},[53,966,967],{"class":152},"})\n",[53,969,970],{"class":55,"line":220},[53,971,165],{"emptyLinePlaceholder":164},[53,973,974,976,979,982,984,987],{"class":55,"line":225},[53,975,724],{"class":148},[53,977,978],{"class":152}," engine.",[53,980,981],{"class":59},"getWasm",[53,983,348],{"class":152},[53,985,986],{"class":59},"load",[53,988,989],{"class":152},"()\n",[53,991,992,994,997,999,1001,1003,1005,1008,1011,1014,1017,1020],{"class":55,"line":233},[53,993,449],{"class":148},[53,995,996],{"class":201}," path",[53,998,455],{"class":148},[53,1000,978],{"class":152},[53,1002,981],{"class":59},[53,1004,348],{"class":152},[53,1006,1007],{"class":59},"call",[53,1009,1010],{"class":152},"\u003C",[53,1012,1013],{"class":59},"Vec2i",[53,1015,1016],{"class":152},"[]>(",[53,1018,1019],{"class":63},"'findPathAStar'",[53,1021,1022],{"class":152},", grid, start, goal)\n",[511,1024,1027],{"type":1025,"title":1026},"warning","WASM tylko z pomiarem",[129,1028,1029,1030,239],{},"Most WASM jest przygotowany, ale MVP go nie wymaga. Dodaj moduł dopiero wtedy, gdy benchmark TS vs WASM wykaże korzyść. Szczegóły: ",[805,1031,1033],{"href":1032},"\u002Fgame-engine\u002Fadvanced\u002Fwasm","WebAssembly",[10,1035,1037],{"id":1036},"przydatne-komendy","Przydatne komendy",[1039,1040,1041,1054],"table",{},[1042,1043,1044],"thead",{},[1045,1046,1047,1051],"tr",{},[1048,1049,1050],"th",{},"Komenda",[1048,1052,1053],{},"Działanie",[1055,1056,1057,1068,1081,1091,1101,1114,1124,1137],"tbody",{},[1045,1058,1059,1065],{},[1060,1061,1062],"td",{},[50,1063,1064],{},"npm run dev",[1060,1066,1067],{},"Serwer deweloperski z HMR",[1045,1069,1070,1075],{},[1060,1071,1072],{},[50,1073,1074],{},"npm run build",[1060,1076,1077,1078],{},"Build produkcyjny + ",[50,1079,1080],{},"release.json",[1045,1082,1083,1088],{},[1060,1084,1085],{},[50,1086,1087],{},"npm test",[1060,1089,1090],{},"Testy jednostkowe (Vitest)",[1045,1092,1093,1098],{},[1060,1094,1095],{},[50,1096,1097],{},"npm run typecheck",[1060,1099,1100],{},"Sprawdzenie typów",[1045,1102,1103,1108],{},[1060,1104,1105],{},[50,1106,1107],{},"npm run bench",[1060,1109,1110,1111],{},"Benchmarki Node → ",[50,1112,1113],{},"benchmarks\u002Flatest.json",[1045,1115,1116,1121],{},[1060,1117,1118],{},[50,1119,1120],{},"npm run bench:check",[1060,1122,1123],{},"Porównanie z baseline (próg 40%)",[1045,1125,1126,1131],{},[1060,1127,1128],{},[50,1129,1130],{},"npm run build:single",[1060,1132,1133,1136],{},[50,1134,1135],{},"playground.html"," — jeden plik, bez sieci",[1045,1138,1139,1144],{},[1060,1140,1141],{},[50,1142,1143],{},"npm run export:game",[1060,1145,1146,1149],{},[50,1147,1148],{},"release\u002Fgame"," + gotowe konfiguracje hostingu",[1151,1152,1153],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":48,"searchDepth":168,"depth":168,"links":1155},[1156,1157,1158,1159,1160,1161,1162,1163],{"id":12,"depth":116,"text":13},{"id":29,"depth":116,"text":30},{"id":126,"depth":116,"text":127},{"id":529,"depth":116,"text":530},{"id":811,"depth":116,"text":812},{"id":847,"depth":116,"text":848},{"id":895,"depth":116,"text":896},{"id":1036,"depth":116,"text":1037},"Od instalacji do pierwszej sceny i produkcyjnego builda — krok po kroku, z konfiguracją projektu JSON i opcjonalnym WASM.","md",{},"\u002Fgame-engine\u002Fgetting-started",{"title":5,"description":1164},"01.game-engine\u002F02.getting-started","oNkY1uO3cFAxPa4NRdC9GUPMHkm_r_Z1ArfKES_Iq0E",[1172,1177],{"title":1173,"path":1174,"stem":1175,"description":1176,"children":-1},"Przegląd","\u002Fgame-engine","01.game-engine\u002F01.index","Browser2DEngine to silnik gier 2D na przeglądarkę z rdzeniem w TypeScripcie, niezależnym od Phasera. Poznaj filozofię, moduły i strukturę dokumentacji.",{"title":1178,"path":1179,"stem":1180,"description":1181,"children":-1},"Konfiguracja","\u002Fgame-engine\u002Fconfiguration","01.game-engine\u002F03.configuration","EngineConfig — wszystkie pola konfiguracji silnika z wartościami domyślnymi, walidacją i przykładami dla typowych setupów.",[1183,1287,1348],{"title":1184,"path":1174,"stem":1175,"children":1185},"2D Game Engine",[1186,1187,1188,1189,1193,1219,1248,1260,1277,1279,1283],{"title":1173,"path":1174,"stem":1175},{"title":5,"path":1167,"stem":1169},{"title":1178,"path":1179,"stem":1180},{"title":1190,"path":1191,"stem":1192},"Architektura","\u002Fgame-engine\u002Farchitecture","01.game-engine\u002F04.architecture",{"title":1194,"path":1195,"stem":1196,"children":1197,"page":1218},"Rdzeń","\u002Fgame-engine\u002Fcore","01.game-engine\u002F05.core",[1198,1202,1206,1210,1214],{"title":1199,"path":1200,"stem":1201},"Silnik i cykl życia","\u002Fgame-engine\u002Fcore\u002Fengine","01.game-engine\u002F05.core\u002F01.engine",{"title":1203,"path":1204,"stem":1205},"Czas i pętla gry","\u002Fgame-engine\u002Fcore\u002Ftime","01.game-engine\u002F05.core\u002F02.time",{"title":1207,"path":1208,"stem":1209},"Sceny","\u002Fgame-engine\u002Fcore\u002Fscenes","01.game-engine\u002F05.core\u002F03.scenes",{"title":1211,"path":1212,"stem":1213},"Obiekty i komponenty","\u002Fgame-engine\u002Fcore\u002Fobjects","01.game-engine\u002F05.core\u002F04.objects",{"title":1215,"path":1216,"stem":1217},"Zdarzenia i harmonogram","\u002Fgame-engine\u002Fcore\u002Fevents","01.game-engine\u002F05.core\u002F05.events",false,{"title":1220,"path":1221,"stem":1222,"children":1223,"page":1218},"Systemy","\u002Fgame-engine\u002Fsystems","01.game-engine\u002F06.systems",[1224,1228,1232,1236,1240,1244],{"title":1225,"path":1226,"stem":1227},"Zasoby (AssetManager)","\u002Fgame-engine\u002Fsystems\u002Fassets","01.game-engine\u002F06.systems\u002F01.assets",{"title":1229,"path":1230,"stem":1231},"Wejście (InputManager)","\u002Fgame-engine\u002Fsystems\u002Finput","01.game-engine\u002F06.systems\u002F02.input",{"title":1233,"path":1234,"stem":1235},"Fizyka (PhysicsManager)","\u002Fgame-engine\u002Fsystems\u002Fphysics","01.game-engine\u002F06.systems\u002F03.physics",{"title":1237,"path":1238,"stem":1239},"Kamera (CameraManager)","\u002Fgame-engine\u002Fsystems\u002Fcamera","01.game-engine\u002F06.systems\u002F04.camera",{"title":1241,"path":1242,"stem":1243},"Audio (AudioManager)","\u002Fgame-engine\u002Fsystems\u002Faudio","01.game-engine\u002F06.systems\u002F05.audio",{"title":1245,"path":1246,"stem":1247},"Tweeny i easing","\u002Fgame-engine\u002Fsystems\u002Ftweens","01.game-engine\u002F06.systems\u002F06.tweens",{"title":1249,"path":1250,"stem":1251,"children":1252,"page":1218},"Dane i zapisy","\u002Fgame-engine\u002Fdata","01.game-engine\u002F07.data",[1253,1256],{"title":1254,"path":807,"stem":1255},"Format projektu","01.game-engine\u002F07.data\u002F01.project-format",{"title":1257,"path":1258,"stem":1259},"Zapisy gry","\u002Fgame-engine\u002Fdata\u002Fsaves","01.game-engine\u002F07.data\u002F02.saves",{"title":1261,"path":1262,"stem":1263,"children":1264,"page":1218},"Zaawansowane","\u002Fgame-engine\u002Fadvanced","01.game-engine\u002F08.advanced",[1265,1269,1271,1273],{"title":1266,"path":1267,"stem":1268},"Pluginy","\u002Fgame-engine\u002Fadvanced\u002Fplugins","01.game-engine\u002F08.advanced\u002F01.plugins",{"title":1033,"path":1032,"stem":1270},"01.game-engine\u002F08.advanced\u002F02.wasm",{"title":848,"path":892,"stem":1272},"01.game-engine\u002F08.advanced\u002F03.debugging",{"title":1274,"path":1275,"stem":1276},"Wydajność i benchmarki","\u002Fgame-engine\u002Fadvanced\u002Fperformance","01.game-engine\u002F08.advanced\u002F04.performance",{"title":844,"path":843,"stem":1278},"01.game-engine\u002F09.deployment",{"title":1280,"path":1281,"stem":1282},"Przykłady","\u002Fgame-engine\u002Fexamples","01.game-engine\u002F10.examples",{"title":1284,"path":1285,"stem":1286},"Decyzje architektoniczne","\u002Fgame-engine\u002Fadr","01.game-engine\u002F11.adr",{"title":1288,"path":1289,"stem":1290,"children":1291},"Reverse Proxy","\u002Freverse-proxy","02.reverse-proxy\u002F01.index",[1292,1293,1296,1299,1320],{"title":1173,"path":1289,"stem":1290},{"title":5,"path":1294,"stem":1295},"\u002Freverse-proxy\u002Fgetting-started","02.reverse-proxy\u002F02.getting-started",{"title":1178,"path":1297,"stem":1298},"\u002Freverse-proxy\u002Fconfiguration","02.reverse-proxy\u002F03.configuration",{"title":1300,"path":1301,"stem":1302,"children":1303,"page":1218},"Ruch i odporność","\u002Freverse-proxy\u002Ftraffic","02.reverse-proxy\u002F04.traffic",[1304,1308,1312,1316],{"title":1305,"path":1306,"stem":1307},"Load balancing","\u002Freverse-proxy\u002Ftraffic\u002Fload-balancing","02.reverse-proxy\u002F04.traffic\u002F01.load-balancing",{"title":1309,"path":1310,"stem":1311},"Health checks","\u002Freverse-proxy\u002Ftraffic\u002Fhealth-checks","02.reverse-proxy\u002F04.traffic\u002F02.health-checks",{"title":1313,"path":1314,"stem":1315},"Circuit breaker i retry","\u002Freverse-proxy\u002Ftraffic\u002Fresilience","02.reverse-proxy\u002F04.traffic\u002F03.resilience",{"title":1317,"path":1318,"stem":1319},"Rate limiting","\u002Freverse-proxy\u002Ftraffic\u002Frate-limiting","02.reverse-proxy\u002F04.traffic\u002F04.rate-limiting",{"title":1321,"path":1322,"stem":1323,"children":1324,"page":1218},"Operacje i wdrożenie","\u002Freverse-proxy\u002Foperations","02.reverse-proxy\u002F05.operations",[1325,1329,1333,1337,1340,1344],{"title":1326,"path":1327,"stem":1328},"Admin API","\u002Freverse-proxy\u002Foperations\u002Fadmin-api","02.reverse-proxy\u002F05.operations\u002F01.admin-api",{"title":1330,"path":1331,"stem":1332},"Metryki i monitoring","\u002Freverse-proxy\u002Foperations\u002Fobservability","02.reverse-proxy\u002F05.operations\u002F02.observability",{"title":1334,"path":1335,"stem":1336},"Bezpieczeństwo","\u002Freverse-proxy\u002Foperations\u002Fsecurity","02.reverse-proxy\u002F05.operations\u002F03.security",{"title":844,"path":1338,"stem":1339},"\u002Freverse-proxy\u002Foperations\u002Fdeployment","02.reverse-proxy\u002F05.operations\u002F04.deployment",{"title":1341,"path":1342,"stem":1343},"Benchmarki","\u002Freverse-proxy\u002Foperations\u002Fbenchmarks","02.reverse-proxy\u002F05.operations\u002F05.benchmarks",{"title":1345,"path":1346,"stem":1347},"Troubleshooting","\u002Freverse-proxy\u002Foperations\u002Ftroubleshooting","02.reverse-proxy\u002F05.operations\u002F06.troubleshooting",{"title":1349,"path":1350,"stem":1351,"children":1352},"Vector Engine","\u002Fvector-engine","03.vector-engine\u002F01.index",[1353,1354,1357,1378,1391,1411],{"title":1173,"path":1350,"stem":1351},{"title":5,"path":1355,"stem":1356},"\u002Fvector-engine\u002Fgetting-started","03.vector-engine\u002F02.getting-started",{"title":1358,"path":1359,"stem":1360,"children":1361,"page":1218},"Scena","\u002Fvector-engine\u002Fscene","03.vector-engine\u002F03.scene",[1362,1366,1370,1374],{"title":1363,"path":1364,"stem":1365},"Format sceny 1.0","\u002Fvector-engine\u002Fscene\u002Fscene-format","03.vector-engine\u002F03.scene\u002F01.scene-format",{"title":1367,"path":1368,"stem":1369},"Obiekty sceny","\u002Fvector-engine\u002Fscene\u002Fobjects","03.vector-engine\u002F03.scene\u002F02.objects",{"title":1371,"path":1372,"stem":1373},"Gradienty i warstwy","\u002Fvector-engine\u002Fscene\u002Fgradients-layers","03.vector-engine\u002F03.scene\u002F03.gradients-layers",{"title":1375,"path":1376,"stem":1377},"Przykłady scen","\u002Fvector-engine\u002Fscene\u002Fexamples","03.vector-engine\u002F03.scene\u002F04.examples",{"title":1379,"path":1380,"stem":1381,"children":1382,"page":1218},"Eksport","\u002Fvector-engine\u002Fexport","03.vector-engine\u002F04.export",[1383,1387],{"title":1384,"path":1385,"stem":1386},"Formaty eksportu","\u002Fvector-engine\u002Fexport\u002Fexport-formats","03.vector-engine\u002F04.export\u002F01.export-formats",{"title":1388,"path":1389,"stem":1390},"Proces eksportu","\u002Fvector-engine\u002Fexport\u002Fexport-workflow","03.vector-engine\u002F04.export\u002F02.export-workflow",{"title":1392,"path":1393,"stem":1394,"children":1395,"page":1218},"Wnętrze silnika","\u002Fvector-engine\u002Finternals","03.vector-engine\u002F05.internals",[1396,1399,1403,1407],{"title":1190,"path":1397,"stem":1398},"\u002Fvector-engine\u002Finternals\u002Farchitecture","03.vector-engine\u002F05.internals\u002F01.architecture",{"title":1400,"path":1401,"stem":1402},"WebAssembly i workery","\u002Fvector-engine\u002Finternals\u002Fwasm","03.vector-engine\u002F05.internals\u002F02.wasm",{"title":1404,"path":1405,"stem":1406},"Workspace i panele","\u002Fvector-engine\u002Finternals\u002Fworkspace","03.vector-engine\u002F05.internals\u002F03.workspace",{"title":1408,"path":1409,"stem":1410},"Breakpointy","\u002Fvector-engine\u002Finternals\u002Fbreakpoints","03.vector-engine\u002F05.internals\u002F04.breakpoints",{"title":1412,"path":1413,"stem":1414},"Wdrożenie na Vercel","\u002Fvector-engine\u002Fdeployment","03.vector-engine\u002F06.deployment",1793986307165]