[{"data":1,"prerenderedAt":1429},["ShallowReactive",2],{"doc:\u002Fgame-engine\u002Fsystems\u002Fassets":3,"surround:\u002Fgame-engine\u002Fsystems\u002Fassets":1178,"navigation":1189},{"id":4,"title":5,"body":6,"description":1171,"extension":1172,"meta":1173,"navigation":244,"path":1174,"seo":1175,"stem":1176,"__hash__":1177},"docs\u002F01.game-engine\u002F06.systems\u002F01.assets.md","Zasoby (AssetManager)",{"type":7,"value":8,"toc":1162},"minimark",[9,14,40,47,51,62,354,358,366,477,481,744,748,760,823,842,846,926,952,956,1158],[10,11,13],"h2",{"id":12},"typy-zasobów","Typy zasobów",[15,16,17,21,22,21,25,21,28,21,31,21,34,21,37],"p",{},[18,19,20],"code",{},"image"," · ",[18,23,24],{},"spritesheet",[18,26,27],{},"atlas",[18,29,30],{},"audio",[18,32,33],{},"bitmapFont",[18,35,36],{},"json",[18,38,39],{},"tilemap",[15,41,42,43,46],{},"Klucz animacji z spritesheeta ma format ",[18,44,45],{},"\u003CassetId>:\u003Ckey>",".",[10,48,50],{"id":49},"deklaracja-i-ładowanie","Deklaracja i ładowanie",[15,52,53,54,61],{},"Assety deklarujesz w scenie, a ładujesz ",[55,56,57,58],"strong",{},"tylko w ",[18,59,60],{},"preload",":",[63,64,69],"pre",{"className":65,"code":66,"language":67,"meta":68,"style":68},"language-ts shiki shiki-themes github-light github-dark","class GameScene extends Scene {\n  declareAssets(assets: AssetDescriptor[]) {\n    super.declareAssets([\n      { id: 'hero', type: 'spritesheet', src: '\u002Fassets\u002Fhero.png', frameWidth: 32, frameHeight: 32 },\n      { id: 'tileset', type: 'tilemap', src: '\u002Fassets\u002Flevel1.json' },\n      { id: 'music', type: 'audio', src: '\u002Fassets\u002Ftheme.ogg' },\n      { id: 'pl', type: 'json', src: '\u002Fassets\u002Fi18n\u002Fpl.json' }\n    ])\n  }\n\n  async preload() {\n    this.getAssets().onProgress(({ loaded, total }) => {\n      this.loadingBar.setProgress(loaded \u002F total)\n    })\n    await this.getAssets().load()\n  }\n}\n","ts","",[18,70,71,94,115,130,166,186,206,227,233,239,246,258,295,316,322,343,348],{"__ignoreMap":68},[72,73,76,80,84,87,90],"span",{"class":74,"line":75},"line",1,[72,77,79],{"class":78},"szBVR","class",[72,81,83],{"class":82},"sScJk"," GameScene",[72,85,86],{"class":78}," extends",[72,88,89],{"class":82}," Scene",[72,91,93],{"class":92},"sVt8B"," {\n",[72,95,97,100,103,107,109,112],{"class":74,"line":96},2,[72,98,99],{"class":82},"  declareAssets",[72,101,102],{"class":92},"(",[72,104,106],{"class":105},"s4XuR","assets",[72,108,61],{"class":78},[72,110,111],{"class":82}," AssetDescriptor",[72,113,114],{"class":92},"[]) {\n",[72,116,118,122,124,127],{"class":74,"line":117},3,[72,119,121],{"class":120},"sj4cs","    super",[72,123,46],{"class":92},[72,125,126],{"class":82},"declareAssets",[72,128,129],{"class":92},"([\n",[72,131,133,136,140,143,146,149,152,155,158,161,163],{"class":74,"line":132},4,[72,134,135],{"class":92},"      { id: ",[72,137,139],{"class":138},"sZZnC","'hero'",[72,141,142],{"class":92},", type: ",[72,144,145],{"class":138},"'spritesheet'",[72,147,148],{"class":92},", src: ",[72,150,151],{"class":138},"'\u002Fassets\u002Fhero.png'",[72,153,154],{"class":92},", frameWidth: ",[72,156,157],{"class":120},"32",[72,159,160],{"class":92},", frameHeight: ",[72,162,157],{"class":120},[72,164,165],{"class":92}," },\n",[72,167,169,171,174,176,179,181,184],{"class":74,"line":168},5,[72,170,135],{"class":92},[72,172,173],{"class":138},"'tileset'",[72,175,142],{"class":92},[72,177,178],{"class":138},"'tilemap'",[72,180,148],{"class":92},[72,182,183],{"class":138},"'\u002Fassets\u002Flevel1.json'",[72,185,165],{"class":92},[72,187,189,191,194,196,199,201,204],{"class":74,"line":188},6,[72,190,135],{"class":92},[72,192,193],{"class":138},"'music'",[72,195,142],{"class":92},[72,197,198],{"class":138},"'audio'",[72,200,148],{"class":92},[72,202,203],{"class":138},"'\u002Fassets\u002Ftheme.ogg'",[72,205,165],{"class":92},[72,207,209,211,214,216,219,221,224],{"class":74,"line":208},7,[72,210,135],{"class":92},[72,212,213],{"class":138},"'pl'",[72,215,142],{"class":92},[72,217,218],{"class":138},"'json'",[72,220,148],{"class":92},[72,222,223],{"class":138},"'\u002Fassets\u002Fi18n\u002Fpl.json'",[72,225,226],{"class":92}," }\n",[72,228,230],{"class":74,"line":229},8,[72,231,232],{"class":92},"    ])\n",[72,234,236],{"class":74,"line":235},9,[72,237,238],{"class":92},"  }\n",[72,240,242],{"class":74,"line":241},10,[72,243,245],{"emptyLinePlaceholder":244},true,"\n",[72,247,249,252,255],{"class":74,"line":248},11,[72,250,251],{"class":78},"  async",[72,253,254],{"class":82}," preload",[72,256,257],{"class":92},"() {\n",[72,259,261,264,266,269,272,275,278,281,284,287,290,293],{"class":74,"line":260},12,[72,262,263],{"class":120},"    this",[72,265,46],{"class":92},[72,267,268],{"class":82},"getAssets",[72,270,271],{"class":92},"().",[72,273,274],{"class":82},"onProgress",[72,276,277],{"class":92},"(({ ",[72,279,280],{"class":105},"loaded",[72,282,283],{"class":92},", ",[72,285,286],{"class":105},"total",[72,288,289],{"class":92}," }) ",[72,291,292],{"class":78},"=>",[72,294,93],{"class":92},[72,296,298,301,304,307,310,313],{"class":74,"line":297},13,[72,299,300],{"class":120},"      this",[72,302,303],{"class":92},".loadingBar.",[72,305,306],{"class":82},"setProgress",[72,308,309],{"class":92},"(loaded ",[72,311,312],{"class":78},"\u002F",[72,314,315],{"class":92}," total)\n",[72,317,319],{"class":74,"line":318},14,[72,320,321],{"class":92},"    })\n",[72,323,325,328,331,333,335,337,340],{"class":74,"line":324},15,[72,326,327],{"class":78},"    await",[72,329,330],{"class":120}," this",[72,332,46],{"class":92},[72,334,268],{"class":82},[72,336,271],{"class":92},[72,338,339],{"class":82},"load",[72,341,342],{"class":92},"()\n",[72,344,346],{"class":74,"line":345},16,[72,347,238],{"class":92},[72,349,351],{"class":74,"line":350},17,[72,352,353],{"class":92},"}\n",[10,355,357],{"id":356},"statusy","Statusy",[63,359,364],{"className":360,"code":362,"language":363,"meta":68},[361],"language-text","idle → queued → loading → ready\n                        ↘ failed\n","text",[18,365,362],{"__ignoreMap":68},[63,367,369],{"className":65,"code":368,"language":67,"meta":68,"style":68},"const assets = this.getAssets()\n\nassets.status('hero')\nassets.isLoaded('hero')\nassets.hasTexture('hero')\nassets.pending()\nassets.failuresList()\nassets.retry(['hero'])\nassets.cancel()\n",[18,370,371,390,394,409,422,435,444,453,468],{"__ignoreMap":68},[72,372,373,376,379,382,384,386,388],{"class":74,"line":75},[72,374,375],{"class":78},"const",[72,377,378],{"class":120}," assets",[72,380,381],{"class":78}," =",[72,383,330],{"class":120},[72,385,46],{"class":92},[72,387,268],{"class":82},[72,389,342],{"class":92},[72,391,392],{"class":74,"line":96},[72,393,245],{"emptyLinePlaceholder":244},[72,395,396,399,402,404,406],{"class":74,"line":117},[72,397,398],{"class":92},"assets.",[72,400,401],{"class":82},"status",[72,403,102],{"class":92},[72,405,139],{"class":138},[72,407,408],{"class":92},")\n",[72,410,411,413,416,418,420],{"class":74,"line":132},[72,412,398],{"class":92},[72,414,415],{"class":82},"isLoaded",[72,417,102],{"class":92},[72,419,139],{"class":138},[72,421,408],{"class":92},[72,423,424,426,429,431,433],{"class":74,"line":168},[72,425,398],{"class":92},[72,427,428],{"class":82},"hasTexture",[72,430,102],{"class":92},[72,432,139],{"class":138},[72,434,408],{"class":92},[72,436,437,439,442],{"class":74,"line":188},[72,438,398],{"class":92},[72,440,441],{"class":82},"pending",[72,443,342],{"class":92},[72,445,446,448,451],{"class":74,"line":208},[72,447,398],{"class":92},[72,449,450],{"class":82},"failuresList",[72,452,342],{"class":92},[72,454,455,457,460,463,465],{"class":74,"line":229},[72,456,398],{"class":92},[72,458,459],{"class":82},"retry",[72,461,462],{"class":92},"([",[72,464,139],{"class":138},[72,466,467],{"class":92},"])\n",[72,469,470,472,475],{"class":74,"line":235},[72,471,398],{"class":92},[72,473,474],{"class":82},"cancel",[72,476,342],{"class":92},[10,478,480],{"id":479},"api","API",[63,482,484],{"className":65,"code":483,"language":67,"meta":68,"style":68},"register(descriptor); registerMany(list); setManifest(m); getManifest()\nhas(id); isLoaded(id); hasTexture(id); get(id); getAll(); pending(); count()\nstatus(id): \"idle\" | \"queued\" | \"loading\" | \"ready\" | \"failed\"\nanimations(); attachBackend(backend); detachBackend()\nqueue(); load(ids?); cancel(): boolean; retry(ids?): number\nfailuresList(); report(); sizeReport(limits?); formatSizes(limits?)\n\nhold(owner, ids); releaseOwner(owner): number\nretain(id); release(id); releaseGroup(group); isRetained(id); gc()\nunload(id)\nonProgress(h); onError(h); onLoaded(h)\n",[18,485,486,511,547,578,596,638,668,672,690,718,726],{"__ignoreMap":68},[72,487,488,491,494,497,500,503,506,509],{"class":74,"line":75},[72,489,490],{"class":82},"register",[72,492,493],{"class":92},"(descriptor); ",[72,495,496],{"class":82},"registerMany",[72,498,499],{"class":92},"(list); ",[72,501,502],{"class":82},"setManifest",[72,504,505],{"class":92},"(m); ",[72,507,508],{"class":82},"getManifest",[72,510,342],{"class":92},[72,512,513,516,519,521,523,525,527,530,532,535,538,540,542,545],{"class":74,"line":96},[72,514,515],{"class":82},"has",[72,517,518],{"class":92},"(id); ",[72,520,415],{"class":82},[72,522,518],{"class":92},[72,524,428],{"class":82},[72,526,518],{"class":92},[72,528,529],{"class":82},"get",[72,531,518],{"class":92},[72,533,534],{"class":82},"getAll",[72,536,537],{"class":92},"(); ",[72,539,441],{"class":82},[72,541,537],{"class":92},[72,543,544],{"class":82},"count",[72,546,342],{"class":92},[72,548,549,551,554,557,560,563,565,568,570,573,575],{"class":74,"line":117},[72,550,401],{"class":82},[72,552,553],{"class":92},"(id): ",[72,555,556],{"class":138},"\"idle\"",[72,558,559],{"class":78}," |",[72,561,562],{"class":138}," \"queued\"",[72,564,559],{"class":78},[72,566,567],{"class":138}," \"loading\"",[72,569,559],{"class":78},[72,571,572],{"class":138}," \"ready\"",[72,574,559],{"class":78},[72,576,577],{"class":138}," \"failed\"\n",[72,579,580,583,585,588,591,594],{"class":74,"line":132},[72,581,582],{"class":82},"animations",[72,584,537],{"class":92},[72,586,587],{"class":82},"attachBackend",[72,589,590],{"class":92},"(backend); ",[72,592,593],{"class":82},"detachBackend",[72,595,342],{"class":92},[72,597,598,601,603,605,608,611,614,616,619,621,624,626,628,630,633,635],{"class":74,"line":168},[72,599,600],{"class":82},"queue",[72,602,537],{"class":92},[72,604,339],{"class":82},[72,606,607],{"class":92},"(ids",[72,609,610],{"class":78},"?",[72,612,613],{"class":92},"); ",[72,615,474],{"class":82},[72,617,618],{"class":92},"()",[72,620,61],{"class":78},[72,622,623],{"class":92}," boolean; ",[72,625,459],{"class":82},[72,627,607],{"class":92},[72,629,610],{"class":78},[72,631,632],{"class":92},")",[72,634,61],{"class":78},[72,636,637],{"class":92}," number\n",[72,639,640,642,644,647,649,652,655,657,659,662,664,666],{"class":74,"line":188},[72,641,450],{"class":82},[72,643,537],{"class":92},[72,645,646],{"class":82},"report",[72,648,537],{"class":92},[72,650,651],{"class":82},"sizeReport",[72,653,654],{"class":92},"(limits",[72,656,610],{"class":78},[72,658,613],{"class":92},[72,660,661],{"class":82},"formatSizes",[72,663,654],{"class":92},[72,665,610],{"class":78},[72,667,408],{"class":92},[72,669,670],{"class":74,"line":208},[72,671,245],{"emptyLinePlaceholder":244},[72,673,674,677,680,683,686,688],{"class":74,"line":229},[72,675,676],{"class":82},"hold",[72,678,679],{"class":92},"(owner, ids); ",[72,681,682],{"class":82},"releaseOwner",[72,684,685],{"class":92},"(owner)",[72,687,61],{"class":78},[72,689,637],{"class":92},[72,691,692,695,697,700,702,705,708,711,713,716],{"class":74,"line":235},[72,693,694],{"class":82},"retain",[72,696,518],{"class":92},[72,698,699],{"class":82},"release",[72,701,518],{"class":92},[72,703,704],{"class":82},"releaseGroup",[72,706,707],{"class":92},"(group); ",[72,709,710],{"class":82},"isRetained",[72,712,518],{"class":92},[72,714,715],{"class":82},"gc",[72,717,342],{"class":92},[72,719,720,723],{"class":74,"line":241},[72,721,722],{"class":82},"unload",[72,724,725],{"class":92},"(id)\n",[72,727,728,730,733,736,738,741],{"class":74,"line":248},[72,729,274],{"class":82},[72,731,732],{"class":92},"(h); ",[72,734,735],{"class":82},"onError",[72,737,732],{"class":92},[72,739,740],{"class":82},"onLoaded",[72,742,743],{"class":92},"(h)\n",[10,745,747],{"id":746},"uchwyty-właścicieli-i-refcounting","Uchwyty właścicieli i refcounting",[15,749,750,751,753,754,757,758,61],{},"Każdy zasób ma licznik odwołań. Scena trzyma zasoby przez ",[18,752,676],{},", a przy ",[18,755,756],{},"shutdown"," silnik woła ",[18,759,682],{},[63,761,763],{"className":65,"code":762,"language":67,"meta":68,"style":68},"assets.hold('game', ['hero', 'tileset'])\n\nassets.retain('hero')\nassets.release('hero')\nassets.gc()\n",[18,764,765,787,791,803,815],{"__ignoreMap":68},[72,766,767,769,771,773,776,779,781,783,785],{"class":74,"line":75},[72,768,398],{"class":92},[72,770,676],{"class":82},[72,772,102],{"class":92},[72,774,775],{"class":138},"'game'",[72,777,778],{"class":92},", [",[72,780,139],{"class":138},[72,782,283],{"class":92},[72,784,173],{"class":138},[72,786,467],{"class":92},[72,788,789],{"class":74,"line":96},[72,790,245],{"emptyLinePlaceholder":244},[72,792,793,795,797,799,801],{"class":74,"line":117},[72,794,398],{"class":92},[72,796,694],{"class":82},[72,798,102],{"class":92},[72,800,139],{"class":138},[72,802,408],{"class":92},[72,804,805,807,809,811,813],{"class":74,"line":132},[72,806,398],{"class":92},[72,808,699],{"class":82},[72,810,102],{"class":92},[72,812,139],{"class":138},[72,814,408],{"class":92},[72,816,817,819,821],{"class":74,"line":168},[72,818,398],{"class":92},[72,820,715],{"class":82},[72,822,342],{"class":92},[824,825,828],"callout",{"title":826,"type":827},"Zero wycieków między scenami","tip",[15,829,830,831,834,835,837,838,841],{},"Nie musisz pamiętać o zwalnianiu assetów — ",[18,832,833],{},"shutdown()"," sceny robi ",[18,836,682],{}," automatycznie. ",[18,839,840],{},"gc()"," usuwa tylko zasoby z zerowym refcountem.",[10,843,845],{"id":844},"raporty-i-budżet-rozmiarów","Raporty i budżet rozmiarów",[63,847,849],{"className":65,"code":848,"language":67,"meta":68,"style":68},"const report = assets.sizeReport({ image: 2_000_000, audio: 5_000_000 })\nconsole.log(assets.formatSizes({ image: 2_000_000 }))\n\nconst diagnosis = assets.diagnose({ usedIds: ['hero'], references: [] })\n",[18,850,851,880,900,904],{"__ignoreMap":68},[72,852,853,855,858,860,863,865,868,871,874,877],{"class":74,"line":75},[72,854,375],{"class":78},[72,856,857],{"class":120}," report",[72,859,381],{"class":78},[72,861,862],{"class":92}," assets.",[72,864,651],{"class":82},[72,866,867],{"class":92},"({ image: ",[72,869,870],{"class":120},"2_000_000",[72,872,873],{"class":92},", audio: ",[72,875,876],{"class":120},"5_000_000",[72,878,879],{"class":92}," })\n",[72,881,882,885,888,891,893,895,897],{"class":74,"line":96},[72,883,884],{"class":92},"console.",[72,886,887],{"class":82},"log",[72,889,890],{"class":92},"(assets.",[72,892,661],{"class":82},[72,894,867],{"class":92},[72,896,870],{"class":120},[72,898,899],{"class":92}," }))\n",[72,901,902],{"class":74,"line":117},[72,903,245],{"emptyLinePlaceholder":244},[72,905,906,908,911,913,915,918,921,923],{"class":74,"line":132},[72,907,375],{"class":78},[72,909,910],{"class":120}," diagnosis",[72,912,381],{"class":78},[72,914,862],{"class":92},[72,916,917],{"class":82},"diagnose",[72,919,920],{"class":92},"({ usedIds: [",[72,922,139],{"class":138},[72,924,925],{"class":92},"], references: [] })\n",[15,927,928,931,932,283,935,283,938,283,941,283,944,947,948,951],{},[18,929,930],{},"diagnose()"," zwraca ",[18,933,934],{},"registered",[18,936,937],{},"unused",[18,939,940],{},"missing",[18,942,943],{},"failed",[18,945,946],{},"unlicensed"," i ",[18,949,950],{},"heaviest"," — gotowe do raportu diagnostycznego.",[10,953,955],{"id":954},"przykład-ekran-ładowania","Przykład: ekran ładowania",[63,957,959],{"className":65,"code":958,"language":67,"meta":68,"style":68},"class BootScene extends Scene {\n  async preload() {\n    const bar = this.createRect(0, 8, { x: 240, y: 360, fill: '#5b63d3' })\n    this.getAssets().onProgress(({ loaded, total }) => {\n      bar.setScale(total ? loaded \u002F total : 0, 1)\n    })\n    await this.getAssets().load()\n  }\n\n  create() {\n    this.getEvents().emit('request:scene', { to: 'menu' })\n  }\n}\n",[18,960,961,974,982,1029,1055,1088,1092,1108,1112,1116,1123,1150,1154],{"__ignoreMap":68},[72,962,963,965,968,970,972],{"class":74,"line":75},[72,964,79],{"class":78},[72,966,967],{"class":82}," BootScene",[72,969,86],{"class":78},[72,971,89],{"class":82},[72,973,93],{"class":92},[72,975,976,978,980],{"class":74,"line":96},[72,977,251],{"class":78},[72,979,254],{"class":82},[72,981,257],{"class":92},[72,983,984,987,990,992,994,996,999,1001,1004,1006,1009,1012,1015,1018,1021,1024,1027],{"class":74,"line":117},[72,985,986],{"class":78},"    const",[72,988,989],{"class":120}," bar",[72,991,381],{"class":78},[72,993,330],{"class":120},[72,995,46],{"class":92},[72,997,998],{"class":82},"createRect",[72,1000,102],{"class":92},[72,1002,1003],{"class":120},"0",[72,1005,283],{"class":92},[72,1007,1008],{"class":120},"8",[72,1010,1011],{"class":92},", { x: ",[72,1013,1014],{"class":120},"240",[72,1016,1017],{"class":92},", y: ",[72,1019,1020],{"class":120},"360",[72,1022,1023],{"class":92},", fill: ",[72,1025,1026],{"class":138},"'#5b63d3'",[72,1028,879],{"class":92},[72,1030,1031,1033,1035,1037,1039,1041,1043,1045,1047,1049,1051,1053],{"class":74,"line":132},[72,1032,263],{"class":120},[72,1034,46],{"class":92},[72,1036,268],{"class":82},[72,1038,271],{"class":92},[72,1040,274],{"class":82},[72,1042,277],{"class":92},[72,1044,280],{"class":105},[72,1046,283],{"class":92},[72,1048,286],{"class":105},[72,1050,289],{"class":92},[72,1052,292],{"class":78},[72,1054,93],{"class":92},[72,1056,1057,1060,1063,1066,1068,1071,1073,1076,1078,1081,1083,1086],{"class":74,"line":168},[72,1058,1059],{"class":92},"      bar.",[72,1061,1062],{"class":82},"setScale",[72,1064,1065],{"class":92},"(total ",[72,1067,610],{"class":78},[72,1069,1070],{"class":92}," loaded ",[72,1072,312],{"class":78},[72,1074,1075],{"class":92}," total ",[72,1077,61],{"class":78},[72,1079,1080],{"class":120}," 0",[72,1082,283],{"class":92},[72,1084,1085],{"class":120},"1",[72,1087,408],{"class":92},[72,1089,1090],{"class":74,"line":188},[72,1091,321],{"class":92},[72,1093,1094,1096,1098,1100,1102,1104,1106],{"class":74,"line":208},[72,1095,327],{"class":78},[72,1097,330],{"class":120},[72,1099,46],{"class":92},[72,1101,268],{"class":82},[72,1103,271],{"class":92},[72,1105,339],{"class":82},[72,1107,342],{"class":92},[72,1109,1110],{"class":74,"line":229},[72,1111,238],{"class":92},[72,1113,1114],{"class":74,"line":235},[72,1115,245],{"emptyLinePlaceholder":244},[72,1117,1118,1121],{"class":74,"line":241},[72,1119,1120],{"class":82},"  create",[72,1122,257],{"class":92},[72,1124,1125,1127,1129,1132,1134,1137,1139,1142,1145,1148],{"class":74,"line":248},[72,1126,263],{"class":120},[72,1128,46],{"class":92},[72,1130,1131],{"class":82},"getEvents",[72,1133,271],{"class":92},[72,1135,1136],{"class":82},"emit",[72,1138,102],{"class":92},[72,1140,1141],{"class":138},"'request:scene'",[72,1143,1144],{"class":92},", { to: ",[72,1146,1147],{"class":138},"'menu'",[72,1149,879],{"class":92},[72,1151,1152],{"class":74,"line":260},[72,1153,238],{"class":92},[72,1155,1156],{"class":74,"line":297},[72,1157,353],{"class":92},[1159,1160,1161],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}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);}",{"title":68,"searchDepth":117,"depth":117,"links":1163},[1164,1165,1166,1167,1168,1169,1170],{"id":12,"depth":96,"text":13},{"id":49,"depth":96,"text":50},{"id":356,"depth":96,"text":357},{"id":479,"depth":96,"text":480},{"id":746,"depth":96,"text":747},{"id":844,"depth":96,"text":845},{"id":954,"depth":96,"text":955},"Manifest, statusy ładowania, uchwyty właścicieli, refcounting, GC i raporty rozmiarów. Jak ładować assety bez wycieków.","md",{},"\u002Fgame-engine\u002Fsystems\u002Fassets",{"title":5,"description":1171},"01.game-engine\u002F06.systems\u002F01.assets","AzeTiwKsv9odqlQUyL7MpsRvNUDNuPhqVJOGCKpaW78",[1179,1184],{"title":1180,"path":1181,"stem":1182,"description":1183,"children":-1},"Zdarzenia i harmonogram","\u002Fgame-engine\u002Fcore\u002Fevents","01.game-engine\u002F05.core\u002F05.events","EventBus, Scheduler, Timer i Random — komunikacja między systemami, zadania z uchwytami, izolacja błędów i deterministyczna losowość.",{"title":1185,"path":1186,"stem":1187,"description":1188,"children":-1},"Wejście (InputManager)","\u002Fgame-engine\u002Fsystems\u002Finput","01.game-engine\u002F06.systems\u002F02.input","Akcje zamiast kodów klawiszy, stan klawiatury, pointer i remapowanie. Jak czytać wejście w komponentach i scenach.",[1190,1301,1362],{"title":1191,"path":1192,"stem":1193,"children":1194},"2D Game Engine","\u002Fgame-engine","01.game-engine\u002F01.index",[1195,1197,1201,1205,1209,1232,1255,1268,1289,1293,1297],{"title":1196,"path":1192,"stem":1193},"Przegląd",{"title":1198,"path":1199,"stem":1200},"Szybki start","\u002Fgame-engine\u002Fgetting-started","01.game-engine\u002F02.getting-started",{"title":1202,"path":1203,"stem":1204},"Konfiguracja","\u002Fgame-engine\u002Fconfiguration","01.game-engine\u002F03.configuration",{"title":1206,"path":1207,"stem":1208},"Architektura","\u002Fgame-engine\u002Farchitecture","01.game-engine\u002F04.architecture",{"title":1210,"path":1211,"stem":1212,"children":1213,"page":1231},"Rdzeń","\u002Fgame-engine\u002Fcore","01.game-engine\u002F05.core",[1214,1218,1222,1226,1230],{"title":1215,"path":1216,"stem":1217},"Silnik i cykl życia","\u002Fgame-engine\u002Fcore\u002Fengine","01.game-engine\u002F05.core\u002F01.engine",{"title":1219,"path":1220,"stem":1221},"Czas i pętla gry","\u002Fgame-engine\u002Fcore\u002Ftime","01.game-engine\u002F05.core\u002F02.time",{"title":1223,"path":1224,"stem":1225},"Sceny","\u002Fgame-engine\u002Fcore\u002Fscenes","01.game-engine\u002F05.core\u002F03.scenes",{"title":1227,"path":1228,"stem":1229},"Obiekty i komponenty","\u002Fgame-engine\u002Fcore\u002Fobjects","01.game-engine\u002F05.core\u002F04.objects",{"title":1180,"path":1181,"stem":1182},false,{"title":1233,"path":1234,"stem":1235,"children":1236,"page":1231},"Systemy","\u002Fgame-engine\u002Fsystems","01.game-engine\u002F06.systems",[1237,1238,1239,1243,1247,1251],{"title":5,"path":1174,"stem":1176},{"title":1185,"path":1186,"stem":1187},{"title":1240,"path":1241,"stem":1242},"Fizyka (PhysicsManager)","\u002Fgame-engine\u002Fsystems\u002Fphysics","01.game-engine\u002F06.systems\u002F03.physics",{"title":1244,"path":1245,"stem":1246},"Kamera (CameraManager)","\u002Fgame-engine\u002Fsystems\u002Fcamera","01.game-engine\u002F06.systems\u002F04.camera",{"title":1248,"path":1249,"stem":1250},"Audio (AudioManager)","\u002Fgame-engine\u002Fsystems\u002Faudio","01.game-engine\u002F06.systems\u002F05.audio",{"title":1252,"path":1253,"stem":1254},"Tweeny i easing","\u002Fgame-engine\u002Fsystems\u002Ftweens","01.game-engine\u002F06.systems\u002F06.tweens",{"title":1256,"path":1257,"stem":1258,"children":1259,"page":1231},"Dane i zapisy","\u002Fgame-engine\u002Fdata","01.game-engine\u002F07.data",[1260,1264],{"title":1261,"path":1262,"stem":1263},"Format projektu","\u002Fgame-engine\u002Fdata\u002Fproject-format","01.game-engine\u002F07.data\u002F01.project-format",{"title":1265,"path":1266,"stem":1267},"Zapisy gry","\u002Fgame-engine\u002Fdata\u002Fsaves","01.game-engine\u002F07.data\u002F02.saves",{"title":1269,"path":1270,"stem":1271,"children":1272,"page":1231},"Zaawansowane","\u002Fgame-engine\u002Fadvanced","01.game-engine\u002F08.advanced",[1273,1277,1281,1285],{"title":1274,"path":1275,"stem":1276},"Pluginy","\u002Fgame-engine\u002Fadvanced\u002Fplugins","01.game-engine\u002F08.advanced\u002F01.plugins",{"title":1278,"path":1279,"stem":1280},"WebAssembly","\u002Fgame-engine\u002Fadvanced\u002Fwasm","01.game-engine\u002F08.advanced\u002F02.wasm",{"title":1282,"path":1283,"stem":1284},"Debugowanie","\u002Fgame-engine\u002Fadvanced\u002Fdebugging","01.game-engine\u002F08.advanced\u002F03.debugging",{"title":1286,"path":1287,"stem":1288},"Wydajność i benchmarki","\u002Fgame-engine\u002Fadvanced\u002Fperformance","01.game-engine\u002F08.advanced\u002F04.performance",{"title":1290,"path":1291,"stem":1292},"Wdrożenie","\u002Fgame-engine\u002Fdeployment","01.game-engine\u002F09.deployment",{"title":1294,"path":1295,"stem":1296},"Przykłady","\u002Fgame-engine\u002Fexamples","01.game-engine\u002F10.examples",{"title":1298,"path":1299,"stem":1300},"Decyzje architektoniczne","\u002Fgame-engine\u002Fadr","01.game-engine\u002F11.adr",{"title":1302,"path":1303,"stem":1304,"children":1305},"Reverse Proxy","\u002Freverse-proxy","02.reverse-proxy\u002F01.index",[1306,1307,1310,1313,1334],{"title":1196,"path":1303,"stem":1304},{"title":1198,"path":1308,"stem":1309},"\u002Freverse-proxy\u002Fgetting-started","02.reverse-proxy\u002F02.getting-started",{"title":1202,"path":1311,"stem":1312},"\u002Freverse-proxy\u002Fconfiguration","02.reverse-proxy\u002F03.configuration",{"title":1314,"path":1315,"stem":1316,"children":1317,"page":1231},"Ruch i odporność","\u002Freverse-proxy\u002Ftraffic","02.reverse-proxy\u002F04.traffic",[1318,1322,1326,1330],{"title":1319,"path":1320,"stem":1321},"Load balancing","\u002Freverse-proxy\u002Ftraffic\u002Fload-balancing","02.reverse-proxy\u002F04.traffic\u002F01.load-balancing",{"title":1323,"path":1324,"stem":1325},"Health checks","\u002Freverse-proxy\u002Ftraffic\u002Fhealth-checks","02.reverse-proxy\u002F04.traffic\u002F02.health-checks",{"title":1327,"path":1328,"stem":1329},"Circuit breaker i retry","\u002Freverse-proxy\u002Ftraffic\u002Fresilience","02.reverse-proxy\u002F04.traffic\u002F03.resilience",{"title":1331,"path":1332,"stem":1333},"Rate limiting","\u002Freverse-proxy\u002Ftraffic\u002Frate-limiting","02.reverse-proxy\u002F04.traffic\u002F04.rate-limiting",{"title":1335,"path":1336,"stem":1337,"children":1338,"page":1231},"Operacje i wdrożenie","\u002Freverse-proxy\u002Foperations","02.reverse-proxy\u002F05.operations",[1339,1343,1347,1351,1354,1358],{"title":1340,"path":1341,"stem":1342},"Admin API","\u002Freverse-proxy\u002Foperations\u002Fadmin-api","02.reverse-proxy\u002F05.operations\u002F01.admin-api",{"title":1344,"path":1345,"stem":1346},"Metryki i monitoring","\u002Freverse-proxy\u002Foperations\u002Fobservability","02.reverse-proxy\u002F05.operations\u002F02.observability",{"title":1348,"path":1349,"stem":1350},"Bezpieczeństwo","\u002Freverse-proxy\u002Foperations\u002Fsecurity","02.reverse-proxy\u002F05.operations\u002F03.security",{"title":1290,"path":1352,"stem":1353},"\u002Freverse-proxy\u002Foperations\u002Fdeployment","02.reverse-proxy\u002F05.operations\u002F04.deployment",{"title":1355,"path":1356,"stem":1357},"Benchmarki","\u002Freverse-proxy\u002Foperations\u002Fbenchmarks","02.reverse-proxy\u002F05.operations\u002F05.benchmarks",{"title":1359,"path":1360,"stem":1361},"Troubleshooting","\u002Freverse-proxy\u002Foperations\u002Ftroubleshooting","02.reverse-proxy\u002F05.operations\u002F06.troubleshooting",{"title":1363,"path":1364,"stem":1365,"children":1366},"Vector Engine","\u002Fvector-engine","03.vector-engine\u002F01.index",[1367,1368,1371,1392,1405,1425],{"title":1196,"path":1364,"stem":1365},{"title":1198,"path":1369,"stem":1370},"\u002Fvector-engine\u002Fgetting-started","03.vector-engine\u002F02.getting-started",{"title":1372,"path":1373,"stem":1374,"children":1375,"page":1231},"Scena","\u002Fvector-engine\u002Fscene","03.vector-engine\u002F03.scene",[1376,1380,1384,1388],{"title":1377,"path":1378,"stem":1379},"Format sceny 1.0","\u002Fvector-engine\u002Fscene\u002Fscene-format","03.vector-engine\u002F03.scene\u002F01.scene-format",{"title":1381,"path":1382,"stem":1383},"Obiekty sceny","\u002Fvector-engine\u002Fscene\u002Fobjects","03.vector-engine\u002F03.scene\u002F02.objects",{"title":1385,"path":1386,"stem":1387},"Gradienty i warstwy","\u002Fvector-engine\u002Fscene\u002Fgradients-layers","03.vector-engine\u002F03.scene\u002F03.gradients-layers",{"title":1389,"path":1390,"stem":1391},"Przykłady scen","\u002Fvector-engine\u002Fscene\u002Fexamples","03.vector-engine\u002F03.scene\u002F04.examples",{"title":1393,"path":1394,"stem":1395,"children":1396,"page":1231},"Eksport","\u002Fvector-engine\u002Fexport","03.vector-engine\u002F04.export",[1397,1401],{"title":1398,"path":1399,"stem":1400},"Formaty eksportu","\u002Fvector-engine\u002Fexport\u002Fexport-formats","03.vector-engine\u002F04.export\u002F01.export-formats",{"title":1402,"path":1403,"stem":1404},"Proces eksportu","\u002Fvector-engine\u002Fexport\u002Fexport-workflow","03.vector-engine\u002F04.export\u002F02.export-workflow",{"title":1406,"path":1407,"stem":1408,"children":1409,"page":1231},"Wnętrze silnika","\u002Fvector-engine\u002Finternals","03.vector-engine\u002F05.internals",[1410,1413,1417,1421],{"title":1206,"path":1411,"stem":1412},"\u002Fvector-engine\u002Finternals\u002Farchitecture","03.vector-engine\u002F05.internals\u002F01.architecture",{"title":1414,"path":1415,"stem":1416},"WebAssembly i workery","\u002Fvector-engine\u002Finternals\u002Fwasm","03.vector-engine\u002F05.internals\u002F02.wasm",{"title":1418,"path":1419,"stem":1420},"Workspace i panele","\u002Fvector-engine\u002Finternals\u002Fworkspace","03.vector-engine\u002F05.internals\u002F03.workspace",{"title":1422,"path":1423,"stem":1424},"Breakpointy","\u002Fvector-engine\u002Finternals\u002Fbreakpoints","03.vector-engine\u002F05.internals\u002F04.breakpoints",{"title":1426,"path":1427,"stem":1428},"Wdrożenie na Vercel","\u002Fvector-engine\u002Fdeployment","03.vector-engine\u002F06.deployment",1793986307408]