[{"data":1,"prerenderedAt":1702},["ShallowReactive",2],{"doc:\u002Fgame-engine\u002Fcore\u002Fscenes":3,"surround:\u002Fgame-engine\u002Fcore\u002Fscenes":1451,"navigation":1462},{"id":4,"title":5,"body":6,"description":1444,"extension":1445,"meta":1446,"navigation":162,"path":1447,"seo":1448,"stem":1449,"__hash__":1450},"docs\u002F01.game-engine\u002F05.core\u002F03.scenes.md","Sceny",{"type":7,"value":8,"toc":1434},"minimark",[9,14,25,120,124,613,617,705,712,790,794,800,921,925,994,998,1118,1248,1252,1257,1290,1333,1343,1347,1423,1430],[10,11,13],"h2",{"id":12},"cykl-życia-sceny","Cykl życia sceny",[15,16,22],"pre",{"className":17,"code":19,"language":20,"meta":21},[18],"language-text","preload() → create() → update(dt) \u002F fixedUpdate(dt) → shutdown()\n","text","",[23,24,19],"code",{"__ignoreMap":21},[26,27,28,44],"table",{},[29,30,31],"thead",{},[32,33,34,38,41],"tr",{},[35,36,37],"th",{},"Faza",[35,39,40],{},"Kiedy",[35,42,43],{},"Po co",[45,46,47,68,81,94,107],"tbody",{},[32,48,49,55,61],{},[50,51,52],"td",{},[23,53,54],{},"preload()",[50,56,57,58],{},"Przed ",[23,59,60],{},"create",[50,62,63,64,67],{},"Deklaracja i ładowanie assetów (",[23,65,66],{},"declareAssets",")",[32,69,70,75,78],{},[50,71,72],{},[23,73,74],{},"create()",[50,76,77],{},"Raz, po załadowaniu",[50,79,80],{},"Budowanie świata gry",[32,82,83,88,91],{},[50,84,85],{},[23,86,87],{},"update(dt)",[50,89,90],{},"Co klatkę",[50,92,93],{},"Logika gry",[32,95,96,101,104],{},[50,97,98],{},[23,99,100],{},"fixedUpdate(dt)",[50,102,103],{},"Co stały krok",[50,105,106],{},"Fizyka i deterministyczna logika",[32,108,109,114,117],{},[50,110,111],{},[23,112,113],{},"shutdown()",[50,115,116],{},"Przy zmianie sceny",[50,118,119],{},"Sprzątanie (silnik robi większość za Ciebie)",[10,121,123],{"id":122},"definiowanie-sceny","Definiowanie sceny",[15,125,129],{"className":126,"code":127,"language":128,"meta":21,"style":21},"language-ts shiki shiki-themes github-light github-dark","import { Scene, type AssetDescriptor } from '@engine'\n\nexport class GameScene extends Scene {\n  constructor() {\n    super('game')\n  }\n\n  declareAssets(assets: AssetDescriptor[]) {\n    super.declareAssets([\n      { id: 'hero', type: 'spritesheet', src: '\u002Fassets\u002Fhero.png', frameWidth: 32, frameHeight: 32 },\n      { id: 'coin', type: 'image', src: '\u002Fassets\u002Fcoin.png' },\n      { id: 'pickup', type: 'audio', src: '\u002Fassets\u002Fpickup.ogg' }\n    ])\n  }\n\n  async preload() {\n    await this.getAssets().load()\n  }\n\n  create() {\n    this.createSprite('hero', { x: 100, y: 300, tags: ['player'] })\n    this.createText('score', { x: 16, y: 16, text: '0', fontSize: '18px', color: '#fff' })\n  }\n\n  update(dt: number) {\n    const player = this.findByTag('player')[0]\n    if (this.getInput().isActionDown('move-right')) {\n      player.translate(220 * dt, 0)\n    }\n  }\n}\n","ts",[23,130,131,157,164,186,195,211,217,222,243,256,291,311,332,338,343,348,359,382,387,392,400,436,481,486,491,510,542,572,596,602,607],{"__ignoreMap":21},[132,133,136,140,144,147,150,153],"span",{"class":134,"line":135},"line",1,[132,137,139],{"class":138},"szBVR","import",[132,141,143],{"class":142},"sVt8B"," { Scene, ",[132,145,146],{"class":138},"type",[132,148,149],{"class":142}," AssetDescriptor } ",[132,151,152],{"class":138},"from",[132,154,156],{"class":155},"sZZnC"," '@engine'\n",[132,158,160],{"class":134,"line":159},2,[132,161,163],{"emptyLinePlaceholder":162},true,"\n",[132,165,167,170,173,177,180,183],{"class":134,"line":166},3,[132,168,169],{"class":138},"export",[132,171,172],{"class":138}," class",[132,174,176],{"class":175},"sScJk"," GameScene",[132,178,179],{"class":138}," extends",[132,181,182],{"class":175}," Scene",[132,184,185],{"class":142}," {\n",[132,187,189,192],{"class":134,"line":188},4,[132,190,191],{"class":138},"  constructor",[132,193,194],{"class":142},"() {\n",[132,196,198,202,205,208],{"class":134,"line":197},5,[132,199,201],{"class":200},"sj4cs","    super",[132,203,204],{"class":142},"(",[132,206,207],{"class":155},"'game'",[132,209,210],{"class":142},")\n",[132,212,214],{"class":134,"line":213},6,[132,215,216],{"class":142},"  }\n",[132,218,220],{"class":134,"line":219},7,[132,221,163],{"emptyLinePlaceholder":162},[132,223,225,228,230,234,237,240],{"class":134,"line":224},8,[132,226,227],{"class":175},"  declareAssets",[132,229,204],{"class":142},[132,231,233],{"class":232},"s4XuR","assets",[132,235,236],{"class":138},":",[132,238,239],{"class":175}," AssetDescriptor",[132,241,242],{"class":142},"[]) {\n",[132,244,246,248,251,253],{"class":134,"line":245},9,[132,247,201],{"class":200},[132,249,250],{"class":142},".",[132,252,66],{"class":175},[132,254,255],{"class":142},"([\n",[132,257,259,262,265,268,271,274,277,280,283,286,288],{"class":134,"line":258},10,[132,260,261],{"class":142},"      { id: ",[132,263,264],{"class":155},"'hero'",[132,266,267],{"class":142},", type: ",[132,269,270],{"class":155},"'spritesheet'",[132,272,273],{"class":142},", src: ",[132,275,276],{"class":155},"'\u002Fassets\u002Fhero.png'",[132,278,279],{"class":142},", frameWidth: ",[132,281,282],{"class":200},"32",[132,284,285],{"class":142},", frameHeight: ",[132,287,282],{"class":200},[132,289,290],{"class":142}," },\n",[132,292,294,296,299,301,304,306,309],{"class":134,"line":293},11,[132,295,261],{"class":142},[132,297,298],{"class":155},"'coin'",[132,300,267],{"class":142},[132,302,303],{"class":155},"'image'",[132,305,273],{"class":142},[132,307,308],{"class":155},"'\u002Fassets\u002Fcoin.png'",[132,310,290],{"class":142},[132,312,314,316,319,321,324,326,329],{"class":134,"line":313},12,[132,315,261],{"class":142},[132,317,318],{"class":155},"'pickup'",[132,320,267],{"class":142},[132,322,323],{"class":155},"'audio'",[132,325,273],{"class":142},[132,327,328],{"class":155},"'\u002Fassets\u002Fpickup.ogg'",[132,330,331],{"class":142}," }\n",[132,333,335],{"class":134,"line":334},13,[132,336,337],{"class":142},"    ])\n",[132,339,341],{"class":134,"line":340},14,[132,342,216],{"class":142},[132,344,346],{"class":134,"line":345},15,[132,347,163],{"emptyLinePlaceholder":162},[132,349,351,354,357],{"class":134,"line":350},16,[132,352,353],{"class":138},"  async",[132,355,356],{"class":175}," preload",[132,358,194],{"class":142},[132,360,362,365,368,370,373,376,379],{"class":134,"line":361},17,[132,363,364],{"class":138},"    await",[132,366,367],{"class":200}," this",[132,369,250],{"class":142},[132,371,372],{"class":175},"getAssets",[132,374,375],{"class":142},"().",[132,377,378],{"class":175},"load",[132,380,381],{"class":142},"()\n",[132,383,385],{"class":134,"line":384},18,[132,386,216],{"class":142},[132,388,390],{"class":134,"line":389},19,[132,391,163],{"emptyLinePlaceholder":162},[132,393,395,398],{"class":134,"line":394},20,[132,396,397],{"class":175},"  create",[132,399,194],{"class":142},[132,401,403,406,408,411,413,415,418,421,424,427,430,433],{"class":134,"line":402},21,[132,404,405],{"class":200},"    this",[132,407,250],{"class":142},[132,409,410],{"class":175},"createSprite",[132,412,204],{"class":142},[132,414,264],{"class":155},[132,416,417],{"class":142},", { x: ",[132,419,420],{"class":200},"100",[132,422,423],{"class":142},", y: ",[132,425,426],{"class":200},"300",[132,428,429],{"class":142},", tags: [",[132,431,432],{"class":155},"'player'",[132,434,435],{"class":142},"] })\n",[132,437,439,441,443,446,448,451,453,456,458,460,463,466,469,472,475,478],{"class":134,"line":438},22,[132,440,405],{"class":200},[132,442,250],{"class":142},[132,444,445],{"class":175},"createText",[132,447,204],{"class":142},[132,449,450],{"class":155},"'score'",[132,452,417],{"class":142},[132,454,455],{"class":200},"16",[132,457,423],{"class":142},[132,459,455],{"class":200},[132,461,462],{"class":142},", text: ",[132,464,465],{"class":155},"'0'",[132,467,468],{"class":142},", fontSize: ",[132,470,471],{"class":155},"'18px'",[132,473,474],{"class":142},", color: ",[132,476,477],{"class":155},"'#fff'",[132,479,480],{"class":142}," })\n",[132,482,484],{"class":134,"line":483},23,[132,485,216],{"class":142},[132,487,489],{"class":134,"line":488},24,[132,490,163],{"emptyLinePlaceholder":162},[132,492,494,497,499,502,504,507],{"class":134,"line":493},25,[132,495,496],{"class":175},"  update",[132,498,204],{"class":142},[132,500,501],{"class":232},"dt",[132,503,236],{"class":138},[132,505,506],{"class":200}," number",[132,508,509],{"class":142},") {\n",[132,511,513,516,519,522,524,526,529,531,533,536,539],{"class":134,"line":512},26,[132,514,515],{"class":138},"    const",[132,517,518],{"class":200}," player",[132,520,521],{"class":138}," =",[132,523,367],{"class":200},[132,525,250],{"class":142},[132,527,528],{"class":175},"findByTag",[132,530,204],{"class":142},[132,532,432],{"class":155},[132,534,535],{"class":142},")[",[132,537,538],{"class":200},"0",[132,540,541],{"class":142},"]\n",[132,543,545,548,551,554,556,559,561,564,566,569],{"class":134,"line":544},27,[132,546,547],{"class":138},"    if",[132,549,550],{"class":142}," (",[132,552,553],{"class":200},"this",[132,555,250],{"class":142},[132,557,558],{"class":175},"getInput",[132,560,375],{"class":142},[132,562,563],{"class":175},"isActionDown",[132,565,204],{"class":142},[132,567,568],{"class":155},"'move-right'",[132,570,571],{"class":142},")) {\n",[132,573,575,578,581,583,586,589,592,594],{"class":134,"line":574},28,[132,576,577],{"class":142},"      player.",[132,579,580],{"class":175},"translate",[132,582,204],{"class":142},[132,584,585],{"class":200},"220",[132,587,588],{"class":138}," *",[132,590,591],{"class":142}," dt, ",[132,593,538],{"class":200},[132,595,210],{"class":142},[132,597,599],{"class":134,"line":598},29,[132,600,601],{"class":142},"    }\n",[132,603,605],{"class":134,"line":604},30,[132,606,216],{"class":142},[132,608,610],{"class":134,"line":609},31,[132,611,612],{"class":142},"}\n",[10,614,616],{"id":615},"rejestracja-i-przełączanie","Rejestracja i przełączanie",[15,618,620],{"className":126,"code":619,"language":128,"meta":21,"style":21},"engine.registerScene(new MenuScene())\nengine.registerScene(new GameScene())\nengine.start('menu')\n\nengine.startScene('game', { level: 3 })\nengine.stopScene('menu')\n",[23,621,622,641,655,669,673,692],{"__ignoreMap":21},[132,623,624,627,630,632,635,638],{"class":134,"line":135},[132,625,626],{"class":142},"engine.",[132,628,629],{"class":175},"registerScene",[132,631,204],{"class":142},[132,633,634],{"class":138},"new",[132,636,637],{"class":175}," MenuScene",[132,639,640],{"class":142},"())\n",[132,642,643,645,647,649,651,653],{"class":134,"line":159},[132,644,626],{"class":142},[132,646,629],{"class":175},[132,648,204],{"class":142},[132,650,634],{"class":138},[132,652,176],{"class":175},[132,654,640],{"class":142},[132,656,657,659,662,664,667],{"class":134,"line":166},[132,658,626],{"class":142},[132,660,661],{"class":175},"start",[132,663,204],{"class":142},[132,665,666],{"class":155},"'menu'",[132,668,210],{"class":142},[132,670,671],{"class":134,"line":188},[132,672,163],{"emptyLinePlaceholder":162},[132,674,675,677,680,682,684,687,690],{"class":134,"line":197},[132,676,626],{"class":142},[132,678,679],{"class":175},"startScene",[132,681,204],{"class":142},[132,683,207],{"class":155},[132,685,686],{"class":142},", { level: ",[132,688,689],{"class":200},"3",[132,691,480],{"class":142},[132,693,694,696,699,701,703],{"class":134,"line":213},[132,695,626],{"class":142},[132,697,698],{"class":175},"stopScene",[132,700,204],{"class":142},[132,702,666],{"class":155},[132,704,210],{"class":142},[706,707,708,711],"p",{},[23,709,710],{},"SceneManager"," pilnuje unikalności id — duplikat rzuca błąd przy rejestracji.",[15,713,715],{"className":126,"code":714,"language":128,"meta":21,"style":21},"const scenes = engine.getScenes()\nscenes.has('game')\nscenes.getActiveSceneId()\nscenes.switch('menu', 'game', { level: 1 })\nscenes.list()\n",[23,716,717,735,749,758,781],{"__ignoreMap":21},[132,718,719,722,725,727,730,733],{"class":134,"line":135},[132,720,721],{"class":138},"const",[132,723,724],{"class":200}," scenes",[132,726,521],{"class":138},[132,728,729],{"class":142}," engine.",[132,731,732],{"class":175},"getScenes",[132,734,381],{"class":142},[132,736,737,740,743,745,747],{"class":134,"line":159},[132,738,739],{"class":142},"scenes.",[132,741,742],{"class":175},"has",[132,744,204],{"class":142},[132,746,207],{"class":155},[132,748,210],{"class":142},[132,750,751,753,756],{"class":134,"line":166},[132,752,739],{"class":142},[132,754,755],{"class":175},"getActiveSceneId",[132,757,381],{"class":142},[132,759,760,762,765,767,769,772,774,776,779],{"class":134,"line":188},[132,761,739],{"class":142},[132,763,764],{"class":175},"switch",[132,766,204],{"class":142},[132,768,666],{"class":155},[132,770,771],{"class":142},", ",[132,773,207],{"class":155},[132,775,686],{"class":142},[132,777,778],{"class":200},"1",[132,780,480],{"class":142},[132,782,783,785,788],{"class":134,"line":197},[132,784,739],{"class":142},[132,786,787],{"class":175},"list",[132,789,381],{"class":142},[10,791,793],{"id":792},"dane-startowe","Dane startowe",[706,795,796,797,236],{},"Scena odbiera dane przez ",[23,798,799],{},"getData\u003CT>()",[15,801,803],{"className":126,"code":802,"language":128,"meta":21,"style":21},"class GameScene extends Scene {\n  create() {\n    const { level } = this.getData\u003C{ level: number }>()\n    this.createText('level', { x: 16, y: 16, text: `Poziom ${level}` })\n  }\n}\n\nengine.startScene('game', { level: 5 })\n",[23,804,805,818,824,859,892,896,900,904],{"__ignoreMap":21},[132,806,807,810,812,814,816],{"class":134,"line":135},[132,808,809],{"class":138},"class",[132,811,176],{"class":175},[132,813,179],{"class":138},[132,815,182],{"class":175},[132,817,185],{"class":142},[132,819,820,822],{"class":134,"line":159},[132,821,397],{"class":175},[132,823,194],{"class":142},[132,825,826,828,831,834,837,840,842,844,847,850,852,854,856],{"class":134,"line":166},[132,827,515],{"class":138},[132,829,830],{"class":142}," { ",[132,832,833],{"class":200},"level",[132,835,836],{"class":142}," } ",[132,838,839],{"class":138},"=",[132,841,367],{"class":200},[132,843,250],{"class":142},[132,845,846],{"class":175},"getData",[132,848,849],{"class":142},"\u003C{ ",[132,851,833],{"class":232},[132,853,236],{"class":138},[132,855,506],{"class":200},[132,857,858],{"class":142}," }>()\n",[132,860,861,863,865,867,869,872,874,876,878,880,882,885,887,890],{"class":134,"line":188},[132,862,405],{"class":200},[132,864,250],{"class":142},[132,866,445],{"class":175},[132,868,204],{"class":142},[132,870,871],{"class":155},"'level'",[132,873,417],{"class":142},[132,875,455],{"class":200},[132,877,423],{"class":142},[132,879,455],{"class":200},[132,881,462],{"class":142},[132,883,884],{"class":155},"`Poziom ${",[132,886,833],{"class":142},[132,888,889],{"class":155},"}`",[132,891,480],{"class":142},[132,893,894],{"class":134,"line":197},[132,895,216],{"class":142},[132,897,898],{"class":134,"line":213},[132,899,612],{"class":142},[132,901,902],{"class":134,"line":219},[132,903,163],{"emptyLinePlaceholder":162},[132,905,906,908,910,912,914,916,919],{"class":134,"line":224},[132,907,626],{"class":142},[132,909,679],{"class":175},[132,911,204],{"class":142},[132,913,207],{"class":155},[132,915,686],{"class":142},[132,917,918],{"class":200},"5",[132,920,480],{"class":142},[10,922,924],{"id":923},"fabryki-obiektów","Fabryki obiektów",[15,926,928],{"className":126,"code":927,"language":128,"meta":21,"style":21},"createObject(options?): GameObject\ncreateSprite(textureId: string, options?): GameObject\ncreateText(text: string, options?): GameObject\ncreateRect(width, height, options): GameObject\ncreateEllipse(radius, options): GameObject\n",[23,929,930,948,963,978,986],{"__ignoreMap":21},[132,931,932,935,938,941,943,945],{"class":134,"line":135},[132,933,934],{"class":175},"createObject",[132,936,937],{"class":142},"(options",[132,939,940],{"class":138},"?",[132,942,67],{"class":142},[132,944,236],{"class":138},[132,946,947],{"class":142}," GameObject\n",[132,949,950,952,955,957,959,961],{"class":134,"line":159},[132,951,410],{"class":175},[132,953,954],{"class":142},"(textureId: string, options",[132,956,940],{"class":138},[132,958,67],{"class":142},[132,960,236],{"class":138},[132,962,947],{"class":142},[132,964,965,967,970,972,974,976],{"class":134,"line":166},[132,966,445],{"class":175},[132,968,969],{"class":142},"(text: string, options",[132,971,940],{"class":138},[132,973,67],{"class":142},[132,975,236],{"class":138},[132,977,947],{"class":142},[132,979,980,983],{"class":134,"line":188},[132,981,982],{"class":175},"createRect",[132,984,985],{"class":142},"(width, height, options): GameObject\n",[132,987,988,991],{"class":134,"line":197},[132,989,990],{"class":175},"createEllipse",[132,992,993],{"class":142},"(radius, options): GameObject\n",[10,995,997],{"id":996},"wyszukiwanie-i-grupy","Wyszukiwanie i grupy",[15,999,1001],{"className":126,"code":1000,"language":128,"meta":21,"style":21},"getObject\u003CT>(id: string): T | undefined\nfind(predicate); findAll(predicate)\nfindByName(name); findByTag(tag); findByTags(tags, mode?)\ngroup(name: string): Group\ngetGroupMembers(name); getGroups()\neach(fn: (object: GameObject) => void): void\n",[23,1002,1003,1025,1039,1062,1075,1087],{"__ignoreMap":21},[132,1004,1005,1008,1011,1014,1017,1019,1022],{"class":134,"line":135},[132,1006,1007],{"class":175},"getObject",[132,1009,1010],{"class":142},"\u003C",[132,1012,1013],{"class":175},"T",[132,1015,1016],{"class":142},">(id: string): ",[132,1018,1013],{"class":200},[132,1020,1021],{"class":138}," |",[132,1023,1024],{"class":200}," undefined\n",[132,1026,1027,1030,1033,1036],{"class":134,"line":159},[132,1028,1029],{"class":175},"find",[132,1031,1032],{"class":142},"(predicate); ",[132,1034,1035],{"class":175},"findAll",[132,1037,1038],{"class":142},"(predicate)\n",[132,1040,1041,1044,1047,1049,1052,1055,1058,1060],{"class":134,"line":166},[132,1042,1043],{"class":175},"findByName",[132,1045,1046],{"class":142},"(name); ",[132,1048,528],{"class":175},[132,1050,1051],{"class":142},"(tag); ",[132,1053,1054],{"class":175},"findByTags",[132,1056,1057],{"class":142},"(tags, mode",[132,1059,940],{"class":138},[132,1061,210],{"class":142},[132,1063,1064,1067,1070,1072],{"class":134,"line":188},[132,1065,1066],{"class":175},"group",[132,1068,1069],{"class":142},"(name: string)",[132,1071,236],{"class":138},[132,1073,1074],{"class":142}," Group\n",[132,1076,1077,1080,1082,1085],{"class":134,"line":197},[132,1078,1079],{"class":175},"getGroupMembers",[132,1081,1046],{"class":142},[132,1083,1084],{"class":175},"getGroups",[132,1086,381],{"class":142},[132,1088,1089,1092,1095,1098,1100,1103,1106,1109,1112,1115],{"class":134,"line":213},[132,1090,1091],{"class":175},"each",[132,1093,1094],{"class":142},"(fn: (",[132,1096,1097],{"class":232},"object",[132,1099,236],{"class":138},[132,1101,1102],{"class":175}," GameObject",[132,1104,1105],{"class":142},") ",[132,1107,1108],{"class":138},"=>",[132,1110,1111],{"class":138}," void",[132,1113,1114],{"class":142},"): ",[132,1116,1117],{"class":138},"void\n",[15,1119,1121],{"className":126,"code":1120,"language":128,"meta":21,"style":21},"const enemies = this.findByTag('enemy')\nconst bosses = this.findByTags(['enemy', 'boss'], 'all')\n\nthis.group('projectiles')\nfor (const bullet of this.getGroupMembers('projectiles')) {\n  bullet.translate(400 * dt, 0)\n}\n",[23,1122,1123,1145,1178,1182,1197,1224,1244],{"__ignoreMap":21},[132,1124,1125,1127,1130,1132,1134,1136,1138,1140,1143],{"class":134,"line":135},[132,1126,721],{"class":138},[132,1128,1129],{"class":200}," enemies",[132,1131,521],{"class":138},[132,1133,367],{"class":200},[132,1135,250],{"class":142},[132,1137,528],{"class":175},[132,1139,204],{"class":142},[132,1141,1142],{"class":155},"'enemy'",[132,1144,210],{"class":142},[132,1146,1147,1149,1152,1154,1156,1158,1160,1163,1165,1167,1170,1173,1176],{"class":134,"line":159},[132,1148,721],{"class":138},[132,1150,1151],{"class":200}," bosses",[132,1153,521],{"class":138},[132,1155,367],{"class":200},[132,1157,250],{"class":142},[132,1159,1054],{"class":175},[132,1161,1162],{"class":142},"([",[132,1164,1142],{"class":155},[132,1166,771],{"class":142},[132,1168,1169],{"class":155},"'boss'",[132,1171,1172],{"class":142},"], ",[132,1174,1175],{"class":155},"'all'",[132,1177,210],{"class":142},[132,1179,1180],{"class":134,"line":166},[132,1181,163],{"emptyLinePlaceholder":162},[132,1183,1184,1186,1188,1190,1192,1195],{"class":134,"line":188},[132,1185,553],{"class":200},[132,1187,250],{"class":142},[132,1189,1066],{"class":175},[132,1191,204],{"class":142},[132,1193,1194],{"class":155},"'projectiles'",[132,1196,210],{"class":142},[132,1198,1199,1202,1204,1206,1209,1212,1214,1216,1218,1220,1222],{"class":134,"line":197},[132,1200,1201],{"class":138},"for",[132,1203,550],{"class":142},[132,1205,721],{"class":138},[132,1207,1208],{"class":200}," bullet",[132,1210,1211],{"class":138}," of",[132,1213,367],{"class":200},[132,1215,250],{"class":142},[132,1217,1079],{"class":175},[132,1219,204],{"class":142},[132,1221,1194],{"class":155},[132,1223,571],{"class":142},[132,1225,1226,1229,1231,1233,1236,1238,1240,1242],{"class":134,"line":213},[132,1227,1228],{"class":142},"  bullet.",[132,1230,580],{"class":175},[132,1232,204],{"class":142},[132,1234,1235],{"class":200},"400",[132,1237,588],{"class":138},[132,1239,591],{"class":142},[132,1241,538],{"class":200},[132,1243,210],{"class":142},[132,1245,1246],{"class":134,"line":219},[132,1247,612],{"class":142},[10,1249,1251],{"id":1250},"sprzątanie-przy-shutdown","Sprzątanie przy shutdown",[706,1253,1254,1256],{},[23,1255,113],{}," sceny automatycznie czyści:",[1258,1259,1260,1264,1267,1270,1277,1283],"ul",{},[1261,1262,1263],"li",{},"rejestr obiektów i indeks tagów,",[1261,1265,1266],{},"grupy,",[1261,1268,1269],{},"subskrypcje zdarzeń przypisane do sceny,",[1261,1271,1272,1273,1276],{},"tweeny (",[23,1274,1275],{},"stopAll","),",[1261,1278,1279,1280,1276],{},"dźwięki właściciela (",[23,1281,1282],{},"stopOwner",[1261,1284,1285,1286,1289],{},"uchwyty assetów (",[23,1287,1288],{},"releaseOwner",").",[15,1291,1293],{"className":126,"code":1292,"language":128,"meta":21,"style":21},"class GameScene extends Scene {\n  shutdown() {\n    this.saveProgress()\n  }\n}\n",[23,1294,1295,1307,1314,1325,1329],{"__ignoreMap":21},[132,1296,1297,1299,1301,1303,1305],{"class":134,"line":135},[132,1298,809],{"class":138},[132,1300,176],{"class":175},[132,1302,179],{"class":138},[132,1304,182],{"class":175},[132,1306,185],{"class":142},[132,1308,1309,1312],{"class":134,"line":159},[132,1310,1311],{"class":175},"  shutdown",[132,1313,194],{"class":142},[132,1315,1316,1318,1320,1323],{"class":134,"line":166},[132,1317,405],{"class":200},[132,1319,250],{"class":142},[132,1321,1322],{"class":175},"saveProgress",[132,1324,381],{"class":142},[132,1326,1327],{"class":134,"line":188},[132,1328,216],{"class":142},[132,1330,1331],{"class":134,"line":197},[132,1332,612],{"class":142},[1334,1335,1337],"callout",{"type":1336},"info",[706,1338,1339,1340,1342],{},"Nie musisz ręcznie usuwać obiektów przy zmianie sceny — silnik zrobi to za Ciebie. Własny ",[23,1341,113],{}," służy tylko do logiki biznesowej (zapis, statystyki, analytics).",[10,1344,1346],{"id":1345},"animacje-klatkowe","Animacje klatkowe",[15,1348,1350],{"className":126,"code":1349,"language":128,"meta":21,"style":21},"this.playAnimation(player, 'hero:run')\nthis.pauseAnimation(player, true)\nthis.setFrame(player, 3)\nthis.getAnimationState(player)\nthis.stopAnimation(player)\n",[23,1351,1352,1369,1385,1400,1412],{"__ignoreMap":21},[132,1353,1354,1356,1358,1361,1364,1367],{"class":134,"line":135},[132,1355,553],{"class":200},[132,1357,250],{"class":142},[132,1359,1360],{"class":175},"playAnimation",[132,1362,1363],{"class":142},"(player, ",[132,1365,1366],{"class":155},"'hero:run'",[132,1368,210],{"class":142},[132,1370,1371,1373,1375,1378,1380,1383],{"class":134,"line":159},[132,1372,553],{"class":200},[132,1374,250],{"class":142},[132,1376,1377],{"class":175},"pauseAnimation",[132,1379,1363],{"class":142},[132,1381,1382],{"class":200},"true",[132,1384,210],{"class":142},[132,1386,1387,1389,1391,1394,1396,1398],{"class":134,"line":166},[132,1388,553],{"class":200},[132,1390,250],{"class":142},[132,1392,1393],{"class":175},"setFrame",[132,1395,1363],{"class":142},[132,1397,689],{"class":200},[132,1399,210],{"class":142},[132,1401,1402,1404,1406,1409],{"class":134,"line":188},[132,1403,553],{"class":200},[132,1405,250],{"class":142},[132,1407,1408],{"class":175},"getAnimationState",[132,1410,1411],{"class":142},"(player)\n",[132,1413,1414,1416,1418,1421],{"class":134,"line":197},[132,1415,553],{"class":200},[132,1417,250],{"class":142},[132,1419,1420],{"class":175},"stopAnimation",[132,1422,1411],{"class":142},[706,1424,1425,1426,1429],{},"Klucz animacji ma format ",[23,1427,1428],{},"\u003CassetId>:\u003Ckey>"," i jest rejestrowany przez backend podczas ładowania spritesheeta.",[1431,1432,1433],"style",{},"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 .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}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}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);}",{"title":21,"searchDepth":166,"depth":166,"links":1435},[1436,1437,1438,1439,1440,1441,1442,1443],{"id":12,"depth":159,"text":13},{"id":122,"depth":159,"text":123},{"id":615,"depth":159,"text":616},{"id":792,"depth":159,"text":793},{"id":923,"depth":159,"text":924},{"id":996,"depth":159,"text":997},{"id":1250,"depth":159,"text":1251},{"id":1345,"depth":159,"text":1346},"Cykl życia sceny, SceneManager, dane startowe, fabryki obiektów i automatyczne sprzątanie przy shutdown.","md",{},"\u002Fgame-engine\u002Fcore\u002Fscenes",{"title":5,"description":1444},"01.game-engine\u002F05.core\u002F03.scenes","C1N3Y4MMaUeF3CM0FeVDQ3qWARSn-1FeitzecF7_PU8",[1452,1457],{"title":1453,"path":1454,"stem":1455,"description":1456,"children":-1},"Czas i pętla gry","\u002Fgame-engine\u002Fcore\u002Ftime","01.game-engine\u002F05.core\u002F02.time","Time to jedyne źródło deltaTime w silniku. Clamp, timeScale, krok stały i stan czasu — z przykładami slow motion i fixed update.",{"title":1458,"path":1459,"stem":1460,"description":1461,"children":-1},"Obiekty i komponenty","\u002Fgame-engine\u002Fcore\u002Fobjects","01.game-engine\u002F05.core\u002F04.objects","GameObject, transformacje, tagi, hierarchia i komponenty z fazami systemowymi. Jak budować zachowania bez ECS.",[1463,1574,1635],{"title":1464,"path":1465,"stem":1466,"children":1467},"2D Game Engine","\u002Fgame-engine","01.game-engine\u002F01.index",[1468,1470,1474,1478,1482,1499,1528,1541,1562,1566,1570],{"title":1469,"path":1465,"stem":1466},"Przegląd",{"title":1471,"path":1472,"stem":1473},"Szybki start","\u002Fgame-engine\u002Fgetting-started","01.game-engine\u002F02.getting-started",{"title":1475,"path":1476,"stem":1477},"Konfiguracja","\u002Fgame-engine\u002Fconfiguration","01.game-engine\u002F03.configuration",{"title":1479,"path":1480,"stem":1481},"Architektura","\u002Fgame-engine\u002Farchitecture","01.game-engine\u002F04.architecture",{"title":1483,"path":1484,"stem":1485,"children":1486,"page":1498},"Rdzeń","\u002Fgame-engine\u002Fcore","01.game-engine\u002F05.core",[1487,1491,1492,1493,1494],{"title":1488,"path":1489,"stem":1490},"Silnik i cykl życia","\u002Fgame-engine\u002Fcore\u002Fengine","01.game-engine\u002F05.core\u002F01.engine",{"title":1453,"path":1454,"stem":1455},{"title":5,"path":1447,"stem":1449},{"title":1458,"path":1459,"stem":1460},{"title":1495,"path":1496,"stem":1497},"Zdarzenia i harmonogram","\u002Fgame-engine\u002Fcore\u002Fevents","01.game-engine\u002F05.core\u002F05.events",false,{"title":1500,"path":1501,"stem":1502,"children":1503,"page":1498},"Systemy","\u002Fgame-engine\u002Fsystems","01.game-engine\u002F06.systems",[1504,1508,1512,1516,1520,1524],{"title":1505,"path":1506,"stem":1507},"Zasoby (AssetManager)","\u002Fgame-engine\u002Fsystems\u002Fassets","01.game-engine\u002F06.systems\u002F01.assets",{"title":1509,"path":1510,"stem":1511},"Wejście (InputManager)","\u002Fgame-engine\u002Fsystems\u002Finput","01.game-engine\u002F06.systems\u002F02.input",{"title":1513,"path":1514,"stem":1515},"Fizyka (PhysicsManager)","\u002Fgame-engine\u002Fsystems\u002Fphysics","01.game-engine\u002F06.systems\u002F03.physics",{"title":1517,"path":1518,"stem":1519},"Kamera (CameraManager)","\u002Fgame-engine\u002Fsystems\u002Fcamera","01.game-engine\u002F06.systems\u002F04.camera",{"title":1521,"path":1522,"stem":1523},"Audio (AudioManager)","\u002Fgame-engine\u002Fsystems\u002Faudio","01.game-engine\u002F06.systems\u002F05.audio",{"title":1525,"path":1526,"stem":1527},"Tweeny i easing","\u002Fgame-engine\u002Fsystems\u002Ftweens","01.game-engine\u002F06.systems\u002F06.tweens",{"title":1529,"path":1530,"stem":1531,"children":1532,"page":1498},"Dane i zapisy","\u002Fgame-engine\u002Fdata","01.game-engine\u002F07.data",[1533,1537],{"title":1534,"path":1535,"stem":1536},"Format projektu","\u002Fgame-engine\u002Fdata\u002Fproject-format","01.game-engine\u002F07.data\u002F01.project-format",{"title":1538,"path":1539,"stem":1540},"Zapisy gry","\u002Fgame-engine\u002Fdata\u002Fsaves","01.game-engine\u002F07.data\u002F02.saves",{"title":1542,"path":1543,"stem":1544,"children":1545,"page":1498},"Zaawansowane","\u002Fgame-engine\u002Fadvanced","01.game-engine\u002F08.advanced",[1546,1550,1554,1558],{"title":1547,"path":1548,"stem":1549},"Pluginy","\u002Fgame-engine\u002Fadvanced\u002Fplugins","01.game-engine\u002F08.advanced\u002F01.plugins",{"title":1551,"path":1552,"stem":1553},"WebAssembly","\u002Fgame-engine\u002Fadvanced\u002Fwasm","01.game-engine\u002F08.advanced\u002F02.wasm",{"title":1555,"path":1556,"stem":1557},"Debugowanie","\u002Fgame-engine\u002Fadvanced\u002Fdebugging","01.game-engine\u002F08.advanced\u002F03.debugging",{"title":1559,"path":1560,"stem":1561},"Wydajność i benchmarki","\u002Fgame-engine\u002Fadvanced\u002Fperformance","01.game-engine\u002F08.advanced\u002F04.performance",{"title":1563,"path":1564,"stem":1565},"Wdrożenie","\u002Fgame-engine\u002Fdeployment","01.game-engine\u002F09.deployment",{"title":1567,"path":1568,"stem":1569},"Przykłady","\u002Fgame-engine\u002Fexamples","01.game-engine\u002F10.examples",{"title":1571,"path":1572,"stem":1573},"Decyzje architektoniczne","\u002Fgame-engine\u002Fadr","01.game-engine\u002F11.adr",{"title":1575,"path":1576,"stem":1577,"children":1578},"Reverse Proxy","\u002Freverse-proxy","02.reverse-proxy\u002F01.index",[1579,1580,1583,1586,1607],{"title":1469,"path":1576,"stem":1577},{"title":1471,"path":1581,"stem":1582},"\u002Freverse-proxy\u002Fgetting-started","02.reverse-proxy\u002F02.getting-started",{"title":1475,"path":1584,"stem":1585},"\u002Freverse-proxy\u002Fconfiguration","02.reverse-proxy\u002F03.configuration",{"title":1587,"path":1588,"stem":1589,"children":1590,"page":1498},"Ruch i odporność","\u002Freverse-proxy\u002Ftraffic","02.reverse-proxy\u002F04.traffic",[1591,1595,1599,1603],{"title":1592,"path":1593,"stem":1594},"Load balancing","\u002Freverse-proxy\u002Ftraffic\u002Fload-balancing","02.reverse-proxy\u002F04.traffic\u002F01.load-balancing",{"title":1596,"path":1597,"stem":1598},"Health checks","\u002Freverse-proxy\u002Ftraffic\u002Fhealth-checks","02.reverse-proxy\u002F04.traffic\u002F02.health-checks",{"title":1600,"path":1601,"stem":1602},"Circuit breaker i retry","\u002Freverse-proxy\u002Ftraffic\u002Fresilience","02.reverse-proxy\u002F04.traffic\u002F03.resilience",{"title":1604,"path":1605,"stem":1606},"Rate limiting","\u002Freverse-proxy\u002Ftraffic\u002Frate-limiting","02.reverse-proxy\u002F04.traffic\u002F04.rate-limiting",{"title":1608,"path":1609,"stem":1610,"children":1611,"page":1498},"Operacje i wdrożenie","\u002Freverse-proxy\u002Foperations","02.reverse-proxy\u002F05.operations",[1612,1616,1620,1624,1627,1631],{"title":1613,"path":1614,"stem":1615},"Admin API","\u002Freverse-proxy\u002Foperations\u002Fadmin-api","02.reverse-proxy\u002F05.operations\u002F01.admin-api",{"title":1617,"path":1618,"stem":1619},"Metryki i monitoring","\u002Freverse-proxy\u002Foperations\u002Fobservability","02.reverse-proxy\u002F05.operations\u002F02.observability",{"title":1621,"path":1622,"stem":1623},"Bezpieczeństwo","\u002Freverse-proxy\u002Foperations\u002Fsecurity","02.reverse-proxy\u002F05.operations\u002F03.security",{"title":1563,"path":1625,"stem":1626},"\u002Freverse-proxy\u002Foperations\u002Fdeployment","02.reverse-proxy\u002F05.operations\u002F04.deployment",{"title":1628,"path":1629,"stem":1630},"Benchmarki","\u002Freverse-proxy\u002Foperations\u002Fbenchmarks","02.reverse-proxy\u002F05.operations\u002F05.benchmarks",{"title":1632,"path":1633,"stem":1634},"Troubleshooting","\u002Freverse-proxy\u002Foperations\u002Ftroubleshooting","02.reverse-proxy\u002F05.operations\u002F06.troubleshooting",{"title":1636,"path":1637,"stem":1638,"children":1639},"Vector Engine","\u002Fvector-engine","03.vector-engine\u002F01.index",[1640,1641,1644,1665,1678,1698],{"title":1469,"path":1637,"stem":1638},{"title":1471,"path":1642,"stem":1643},"\u002Fvector-engine\u002Fgetting-started","03.vector-engine\u002F02.getting-started",{"title":1645,"path":1646,"stem":1647,"children":1648,"page":1498},"Scena","\u002Fvector-engine\u002Fscene","03.vector-engine\u002F03.scene",[1649,1653,1657,1661],{"title":1650,"path":1651,"stem":1652},"Format sceny 1.0","\u002Fvector-engine\u002Fscene\u002Fscene-format","03.vector-engine\u002F03.scene\u002F01.scene-format",{"title":1654,"path":1655,"stem":1656},"Obiekty sceny","\u002Fvector-engine\u002Fscene\u002Fobjects","03.vector-engine\u002F03.scene\u002F02.objects",{"title":1658,"path":1659,"stem":1660},"Gradienty i warstwy","\u002Fvector-engine\u002Fscene\u002Fgradients-layers","03.vector-engine\u002F03.scene\u002F03.gradients-layers",{"title":1662,"path":1663,"stem":1664},"Przykłady scen","\u002Fvector-engine\u002Fscene\u002Fexamples","03.vector-engine\u002F03.scene\u002F04.examples",{"title":1666,"path":1667,"stem":1668,"children":1669,"page":1498},"Eksport","\u002Fvector-engine\u002Fexport","03.vector-engine\u002F04.export",[1670,1674],{"title":1671,"path":1672,"stem":1673},"Formaty eksportu","\u002Fvector-engine\u002Fexport\u002Fexport-formats","03.vector-engine\u002F04.export\u002F01.export-formats",{"title":1675,"path":1676,"stem":1677},"Proces eksportu","\u002Fvector-engine\u002Fexport\u002Fexport-workflow","03.vector-engine\u002F04.export\u002F02.export-workflow",{"title":1679,"path":1680,"stem":1681,"children":1682,"page":1498},"Wnętrze silnika","\u002Fvector-engine\u002Finternals","03.vector-engine\u002F05.internals",[1683,1686,1690,1694],{"title":1479,"path":1684,"stem":1685},"\u002Fvector-engine\u002Finternals\u002Farchitecture","03.vector-engine\u002F05.internals\u002F01.architecture",{"title":1687,"path":1688,"stem":1689},"WebAssembly i workery","\u002Fvector-engine\u002Finternals\u002Fwasm","03.vector-engine\u002F05.internals\u002F02.wasm",{"title":1691,"path":1692,"stem":1693},"Workspace i panele","\u002Fvector-engine\u002Finternals\u002Fworkspace","03.vector-engine\u002F05.internals\u002F03.workspace",{"title":1695,"path":1696,"stem":1697},"Breakpointy","\u002Fvector-engine\u002Finternals\u002Fbreakpoints","03.vector-engine\u002F05.internals\u002F04.breakpoints",{"title":1699,"path":1700,"stem":1701},"Wdrożenie na Vercel","\u002Fvector-engine\u002Fdeployment","03.vector-engine\u002F06.deployment",1793986307383]