Yeroo too'ataa tokko galchitu, buttooni ni mash goota, ulee sochoofta, triggers harkifta... akka developer tokkootti immoo tokkollee hin argitu. Browser’n fudhachaa jira, mirkanaa’aa, garuu lakkoofsa konsoolii keessatti galmeessaa yoo ta’e malee, hin mul’atu. Sun mataa dhukkubbii Gamepad API waliin ta’a. Waggootaaf kan ture yoo ta’u, dhugumatti humna guddaa qaba. Buttons, sticks, triggers, hojiiwwan dubbisuu dandeessa. Garuu namoonni baay’een hin tuqan. Maalif? Duub-deebii waan hin jirreef. Meeshaalee developer keessatti paanaalii hin jiru. To’ataan waan ati yaaddu illee hojjechaa jiraachuu isaa beekuuf karaan ifa ta’e hin jiru. Akka waan jaamaa balali'uutti namatti dhagahama. Sun meeshaa xiqqoo tokko ijaaruuf gahaa na dogoggore: Gamepad Cascade Debugger. Bu'aa konsolii ilaaluu mannaa, ilaalcha kallattiin, walqunnamtii too'ataa argatta. Waan tokko dhiibaa iskiriinii irratti deebii kenna. Akkasumas CSS Cascade Layers wajjin, akkaataawwan qindaa’anii turu, kanaaf sirreessuuf qulqulluudha. Barreeffama kana keessatti, maaliif too’attoota sirreessuun akkas dhukkubbii akka ta’e, akkamitti CSS qulqulleessuuf akka gargaaru, fi akkamitti pirojektoota mataa keetiitif sirreeffama mul’ataa irra deebi’amee fayyadamuu danda’u ijaaruu akka dandeessu sitti agarsiisa.
Hundaa isaanii galmeessuu yoo dandeessellee, daftee spam konsoolii hin dubbifamneen dhufta. Fakkeenyaaf: [0,0,1,0,0,0.5,0,...] jedhamuun beekama. [0,0,0,0,1,0,0,...] jedhamuun beekama. [0,0,1,0,0,0,0,...] jedhamuun beekama.
Button maal akka dhiibame beekuu dandeessaa? Tarii, garuu ija keessan erga dhiphitanii fi galtee muraasa erga dhabdee booda qofa. Kanaafuu, lakki, debugging yeroo galtee dubbisuu salphaatti hin dhufu. Rakkoo 3ffaa: Hanqina Caasaa Yoo mul'ataa saffisaa walitti darbattellee, akkaataawwan dafanii jeeqamuu danda'u. Haalli durtii, sochii, fi sirreeffama wal-irra bu'uu danda'a, caasaa ifa ta'e malee, CSS kee cabbii fi dheeressuuf rakkisaa ta'a. CSS Cascade Layers gargaaruu danda'a. Akkaataawwan gara “layers” kanneen dursa kennuudhaan tartiiba qabanitti garee godhu, kanaaf adda ta’uu loluu fi tilmaamu dhiista, “Maaliif akkaataan sirreeffama koo hin agarsiisu?” Kanaa mannaa, yaaddoo adda addaa qabaatta:
Bu’uura: Istaandardii too’ataa, bifa jalqabaa. Sochii: Qabduu dhiibamee fi uleewwan socho'aniif calaqqisiisa. Debug: Overlays developers (fkn, dubbisa lakkoofsaa, qajeelfamoota, fi kkf).
Osoo akkaataa kanaan CSS keessatti laayiyeroota hiiknee, ni qabaanna: /* dursa gadi aanaa hanga olaanaa */ @bu'uura laayibarii, socho'aa, sirreeffama;
@bu'uura laayibarii { . /* ... */ } .
@layer socho'aa { . /* ... */ } .
@layer sirreessuu { . /* ... */ } .
Tokkoon tokkoon laayibarii akka tilmaamaatti waan tuulamuuf, yeroo hunda seera kamtu akka mo'atu beekta. Tilmaamni sun sirreessuu salphaa qofa osoo hin taane, qabatamaan akka bulfamuu danda'u taasisa. Rakkoo (galtee hin mul’anne, jeequmsa qabu) fi mala (sirreeffama mul’ataa Cascade Layers tiin ijaarame) uwwifneerra. Amma adeemsa tartiiba tartiiba debugger ijaaruuf deemna. Yaad-rimee Debugger Galteen dhokataa akka mul'atu gochuuf karaan salphaan iskiriinii irratti kaasuun qofa. Debugger kun waan kana hojjeta. Buttons, triggers, fi joysticks hundi isaanii mul'ata argatu.
Dhiibbaa A: Geengoon tokko ni ibsa. Ulee sana dhiibuu: Geengoon naannootti ni siqxa. Trigger walakkaa harkisi: Barri tokko walakkaa guuta.
Amma 0 fi 1 ijaan ilaalaa hin jirtu, garuu dhugumatti too’ataan deebii kennuu kallattiin ilaalaa jirta. Dhugaadha, erga haalawwan akka durtii, dhiibame, odeeffannoo sirreeffamaa, tarii haalata waraabbii illee irratti tuuluu jalqabdee booda, CSS guddaa fi walxaxaa ta'uu jalqaba. Sana keessaa laayibaroonni kaskaadii faayidaarra oolchu. Fakkeenyi uffata irraa baafame kunooti: @bu'uura laayibarii { . .button { . duubbee: #222; daangaa-raadiyaasii: 50%; bal'inni: 40px; olka’iinsa: 40px; } . } .
@layer socho'aa { . .button.dhiibame { . duubbee: #0f0; /* magariisa ifaa */ . } . } .
@layer sirreessuu { . .button::booda { . qabiyyee: attr(gatii-deetaa); guddina qubee: 12px; halluu: #fff; } . } .
Tartiiba laayibarii dhimma qaba: bu'uura → socho'aa → sirreeffama.
bu'uurri too'ataa harkisa. active handles haalawwan dhiibaman. debug darbata overlays irratti.
Akkasitti caccabsuun waraana addaa addaa (weird specificity wars) hin lolu jechuudha. Tokkoon tokkoon laayibarii bakka isaa qaba, yeroo hunda maaltu akka mo'atu ni beekta. Ijaaruun Bahee Mee dursinee waan tokko iskiriinii irratti haa galchinu. Gaarii fakkaachuu hin barbaachisu — jiraachuu qofa waan qabuuf waan ittiin hojjennu qabna.
Sirreeffama Kaaskeedii Tapha
Sun jecha jechaatti saanduqa qofa. Ammallee kan nama gammachiisu miti, garuu qabattoo booda CSS fi JavaScript waliin qabachuuf nuuf kenna. Tole, ani asitti laayiyeroota kaskaadii fayyadamaa jira sababiin isaas al tokko haalawwan dabalataa yoo dabalte wantoota qindaa’anii eega. Kunoo darbiinsa garaa garaa:
/* ======================================================================================================= SETUP LAYERS CASCADE Dhimma tartiiba: bu'uura → socho'aa → sirreeffama ===================================== */
/* Tartiiba laayibarii dursee ibsi */ . @bu'uura laayibarii, socho'aa, sirreeffama;
/* Laayibarii 1: Akkaataa bu'uuraa - mul'ata durtii */ . @bu'uura laayibarii { . .button { . duubbee: #333; daangaa-raadiyaasii: 50%; bal'inni: 70px; olka’iinsa: 70px; agarsiisa: flex; justify-content: giddu galeessa; align-items: giddugaleessa; } .
.dhaabbadhu { . bal'inni: 20px; olka’iinsa: 70px; duubbee: #333; agarsiisa: sarara keessaa-uggura; } . } .
/* Laayibarii 2: Haalawwan sochii qaban - qareewwan dhiibaman qabata */ . @layer socho'aa { . .button.socho'aa { . duubbee: #0f0; /* Yeroo dhiibamu magariisa ifaa */ jijjiirraa: iskeelii(1.1); /* Xiqqoo qaree guddisa */ . } .
.dhaabbadhu.socho'aa { . duubbee: #0f0; jijjiirraa: iskeeliiY(1.1); /* Yeroo dhiibamu dhaabbataadhaan diriirsa */ . } . } .
/* Layer 3: Haguuggii sirreessaa - odeeffannoo developer */ . @layer sirreessuu { . .button::booda { . qabiyyee: attr(gatii-deetaa); /* Gatii lakkoofsaa agarsiisa */ . guddina qubee: 12px; halluu: #fff; } . } .
Bareedinni mala kanaa tokkoon tokkoon laayibariin kaayyoo ifa ta’e qabaachuu isaati. Laayibariin bu'uuraa gonkumaa socho'aa irra darbuu hin danda'u, sochiin immoo gonkumaa sirreeffama irra darbuu hin danda'u, adda ta'uu osoo hin ilaalin. Kunis waraana addaa CSS kan yeroo baayyee meeshaalee sirreeffama dhiphisan dhabamsiisa. Amma tuutni tokko tokko duubbee dukkanaa'aa irra taa'aa jiru fakkaata. Dhugaa dubbachuuf baayyee hamaa miti.
JaavaScript dabaluu Yeroo JaavaScript. Kunis bakka too'ataan qabatamaan waan tokko hojjetudha. Kana tartiiba tarkaanfiin ijaarra. Tarkaanfii 1: Bulchiinsa Mootummaa Saaguu Tokkoffaa, haala sirreeffamaa hordofuuf jijjiiramoota nu barbaachisa: // ==================================================================================================== // BULCHIINSA MOOTUMMAA // ====================================================================================================
haa fiiguu = soba; // Sirreessaan sochii qabaachuu fi dhiisuu isaa hordofa haa rafId; // ID requestAnimationFrame haquuf kuusa
Jijjiiramoonni kun loop sochii qaamaa kan galtee gamepad walitti fufiinsaan dubbisu to'atu. Tarkaanfii 2: Wabiiwwan DOM qabadhu Itti aansuudhaan, wabiiwwan elementoota HTML hunda fooyyessinu arganna: // ==================================================================================================== // WAABII ELEMENTII DOM // ====================================================================================================
const btnA = galmee.getElementById ("btn-a"); const btnB = galmee.getElementById ("btn-b"); const btnX = galmee.getElementById ("btn-x"); const pause1 = galmee.getElementById ("dhaabbannaa1"); const pause2 = galmee.getElementById ("dhaabbannaa2"); const haala = galmee.getElementById ("haala");
Wabiiwwan kana dursanii kuusuun DOM irra deddeebi'anii gaafachuu caalaa bu'a qabeessa. Tarkaanfii 3: Keyboard Fallback dabaluu To’ataa fiizikaalaa malee qorachuuf, furtuuwwan kiiboordii gara buttooniitti kaartaa: // ==================================================================================================== // KEYBOARD FALLBACK (to'ataa malee qorachuuf) // ====================================================================================================
const furtuuKaartaa = { . "a": btnA, . "b": btnB, . "x": btnX, 10. "p": [pause1, pause2] // furtuun 'p' barruulee dhaabbii lamaan to'ata };
Kunis furtuuwwan kiiboordii irratti dhiibuun UI akka qorannu nu taasisa. Tarkaanfii 4ffaa: The Main Update Loop uumuu Kunoo bakka falfalli sun itti ta’u. Faankishiniin kun walitti fufiinsaan kan hojjetuu fi haala gamepad dubbisa: // ==================================================================================================== // LOOP FOOYYESSUU GAMEPAD GUDDAA // ====================================================================================================
faankishinii fooyya'iinsaTapha() { . // Gamepads walitti hidhaman hunda argadhu const gamepads = navigeeshinii.getGamepads (); yoo (!gamepads) deebi'e;
// Gamepad jalqabaa walqabate fayyadami const gp = paadiiwwan tapha [0];
yoo (gp) { // Haalawwan qaree fooyyessi gita "sochii" jijjiiruun btnA.classList.toggle ("sochii", gp.buttons [0]. dhiibame); btnB.classList.toggle ("sochii", gp.buttons [1]. dhiibame); btnX.classList.toggle ("sochii", gp.buttons [2]. dhiibame);
// Qabduu dhaabbii qabachuu (indeksii qaree 9 too'attoota baay'ee irratti) . const pauseDhiibameera = gp.buttons [9].dhiibame; pause1.classList.toggle("sochii", dhaabbiiDhiibameera); pause2.classList.toggle("sochii", dhaabbiiDhiibameera);
// Tarree qaree amma dhiibame agarsiisa haalataaf ijaari haa dhiibame = []; gp.buttons.forTokkoon tokkoon ((btn, i) => { yoo (btn.dhiibame) .pressed.push("Button " + i); });
// Yoo qaree kamiyyuu dhiibame barruu haalata haaromsi yoo (dhiibame.dheerina > 0) { . status.textContent = "Dhiibameera: " + dhiibame.join(", "); } . } .
// Yoo debugger hojjechaa jiraate loop itti fufi yoo (fiigaa jiru) { . rafId = gaaffiiAnimationFrame (fooyyessaGamepad); } . } .
Malli classList.toggle() gita socho'aa qaree dhiibamuu irratti hundaa'uun dabalata ykn haqa, kunis akkaataawwan laayibarii CSS keenya kakaasa. Tarkaanfii 5: Taateewwan Kiiboodii Qabuu Dhaggeeffattoonni taatee kunniin kufaatii kiiboordii akka hojjetu godhu: // ==================================================================================================== // KEYBOARD TAATEE HOJJETTOOTA // ====================================================================================================
galmee.DhaggeeffataaTaatee dabaluu("furtuu gadi", (e) => { yoo (kaartaa furtuu [e.furtuu]) { . // Qaamolee tokko ykn hedduu qabadhu if (Tarree.isArray(Kaartaa furtuu [e.furtuu])) { furtuuKaartaa [e.furtuu].Tokkoon tokkoon (el => el.Tarree gitaa.dabaluu ("sochii")); } else { furtuuKaartaa [e.furtuu].tarree gitaa.dabaluu ("socho'aa"); } . status.textContent = "Furtuun dhiibame: " + e.furtuu.gara Qubee Guddaa(); } . });
galmee.DhaggeeffataaTaatee dabaluu("furtuu", (e) => { yoo (kaartaa furtuu [e.furtuu]) { . // Yeroo furtuun gadhiifamu haala sochii qabu haqi if (Tarree.isArray(Kaartaa furtuu [e.furtuu])) { furtuuKaartaa [e.furtuu].Tokkoon tokkoon (el => el.Tarree gitaa.remove ("sochii")); } else { furtuuKaartaa [e.furtuu].tarree gitaa.remove ("socho'aa"); } . status.textContent = "Furtuun gadhiifame: " + e.furtuu.gara Qubee Guddaa(); } . });
Tarkaanfii 6: To'annoo Jalqabaa/Dhaabbii Dabaluu Dhumarratti, karaa itti debugger ibsuu fi cufnu nu barbaachisa: // ==================================================================================================== // TOGGLE DEBUGGER ON/OFF gochuu // ====================================================================================================
document.getElementById("jijjiiri").DhaggeeffataaTaatee dabaluu("cuqaasuu", () => { fiiguu = !fiiguu; // Haala fiigichaa garagalchi
yoo (fiigaa jiru) { . status.textContent = "Sirreessaan hojjechaa jira..."; updateGamepad (); // Looppii fooyya'iinsaa jalqabi } else { status.textContent = "Sirreessaan hin sochoone"; haquuAnimationFrame (rafId); // Looppii dhaabuu } . });
Kanaafuu eeyyee, button tokko dhiibaa ni ibsa. Ulee dhiibaa ni socho'a. Kana qofa. Wanti tokko dabalataan: gatiiwwan raw. Yeroo tokko tokko ibsaa osoo hin taane lakkoofsa qofa arguu barbaadda.
Sadarkaa kanatti, ilaaluu qabdu:
To'ataa salphaa iskiriinii irratti, . Buttonwwan akkuma isaan waliin wal qunnamtu deebii kennan, fi Dubbisa sirreeffama filannoo kan indeeksii qaree dhiibame agarsiisu.
Kana abstraaktii akka hin taane gochuuf, kunoo agarsiisa saffisaa too’ataa iskiriinii irratti yeroo qabatamaa keessatti deebii kennu:
Amma, Start Recording dhiibuun hanga Stop Recording tuqxutti waan hunda galmeessa. 2. Deetaa gara CSV/JSON tti erguu Erga galmee qabaannee booda, save gochuu barbaanna.
Tarkaanfii 1: Gargaaraa Download Uumuu Tokkoffaa, faankishinii gargaaraa kan faayiloota buufachuuf browser keessatti to'atu nu barbaachisa: // ==================================================================================================== // GARGAARAA FAYILII BUUFACHUU // ====================================================================================================
function downloadFile(maqaa faayilii, qabiyyee, gosa = "barruu/difa") { // Qabiyyee irraa blob uumi const blob = Blob haaraa ([qabiyyee], { gosa }); const url = URL.URLWanta uumuu (blob);
// Link yeroof download uumuun cuqaasaa const a = galmee.Qaama uumuu ("a"); a.href = url; a.download = maqaa faayilii; a.cuqaasuu();
// Erga buufattee booda URL wantaa qulqulleessi YerooDhuma saagi (() => URL.URLWanta haquu (url), 100); } .
Faankishiniin kun deetaa kee irraa Blob (wanta guddaa baayinarii) uumuudhaan, URL yeroof maddisiisuudhaan, fi sagantaadhaan hidhaa buufachuu cuqaasuun hojjeta. Qulqullinni kun akka nuti mimoorii hin dhangalaanne mirkaneessa. Tarkaanfii 2: Al-ergii JSON qabadhu JSON caasaa deetaa guutuu kunuunsuuf mijataa dha:
// ==================================================================================================== // AKKA JSON tti ALAA // ====================================================================================================
document.getElementById("al-ergii-json").DhaggeeffataaTaatee dabaluu("cuqaasi", () => { // Wanti ergamu jiraachuu isaa mirkaneessi yoo (!fureemii.dheerina) { . console.warn("Galmee erguuf hin jiru."); deebi’uu; } .
// Fe'umsa meetadaataa fi furmaata waliin uumi const fe'umsaa = { . createdAt: Guyyaa haaraa().toISOString(), . furmaata };
// Akka JSON foormaatii ta'etti buufadhu Faayilii buufachuu( "gamepad-log.json" jechuun kan qophaa'e. JSON.stringify (fe'iinsa, null, 2), . "iyyata/json". ); });
Akkaataan JSON waan hunda caaseffama qabuu fi salphaatti parseable ta'ee eega, kunis gara meeshaalee dev tti deebi'ee fe'uuf ykn hiriyyoota garee waliin qooduuf mijataa taasisa. Tarkaanfii 3: Al-ergii CSV qabadhu Al-ergii CSV tiif, deetaa sadarkaa gara tarree fi tarjaa diriirsuu qabna:
//=============================================================================================================== // AKKA CSV tti ALAA // ====================================================================================================
document.getElementById("erg-csv").DhaggeeffataaTaatee dabaluu("cuqaasi", () => { // Wanti ergamu jiraachuu isaa mirkaneessi yoo (!fureemii.dheerina) { . console.warn("Galmee erguuf hin jiru."); deebi’uu; } .
// Tarree mataduree CSV ijaari (tarjaawwan chaappaa yeroo, qaree hunda, siiqqeewwan hunda) . const matadureeButtons = furmaata [0].buttons.map ((_, i) => btn $ {i}); const matadureeAxes = frames [0].axes.map ((_, i) => siiqqee $ {i}); const mataduree = ["t", ...Button mataduree, ...Axes mataduree].walitti makamuu (",") + "\n";
// Tarreewwan deetaa CSV ijaaruu tarreewwan konst = furtuuwwan.kaartaa(f => { . const btnVals = f.buttons.kaartaa (b => b.gatii); deebisa [f.t, ...btnVals, ...f.axes].walitti makamuu (","); }).join ("\ n");
// Akka CSV tti buufadhu downloadFile("gamepad-log.csv", mata duree + tarreewwan, "barruu/csv"); });
CSVn kallattiin Excel ykn Google Sheets keessatti waan banamuuf xiinxala deetaatiif baay'ee gaarii dha, kunis chaartii akka uumtu, deetaa akka calaltu, ykn fakkiiwwan mul'ataan akka argitu si taasisa. Amma erga qareewwan erguu keessa jiranii, filannoowwan haaraa lama qaaqa irratti argita: JSON erguu fi CSV erguu. JSON yoo galmee raw gara meeshaalee dev keessanitti deebisuu barbaadde ykn caasaa naannoo poke gochuu barbaadde gaarii dha. CSV, gama biraatiin, kallattiin gara Excel ykn Google Sheets tti banama kanaaf galteewwan chaartii, calaluu, ykn walbira qabuu dandeessa. Fakkiin armaan gadii too'annoowwan dabalataa sanaan paanaalii maal akka fakkaatu agarsiisa.
3. Sirna Suuraa Kaasuun Yeroo tokko tokko waraabbii guutuu si hin barbaachisu, “screenshot” saffisaa haalawwan galtee qofa. Bakka sanatti button Take Snapshot jedhu gargaara.
Akkasumas JaavaScript:
// ==================================================================================================== // FAKKEENYA FUDHAA // ====================================================================================================
document.getElementById("fakkii").DhaggeeffataaTaatee dabaluu("cuqaasuu", () => { // Gamepads walitti hidhaman hunda argadhu const pads = navigator.getGamepads (); const Paadiiwwan sochii qaban = [];
// Loop through fi haala tokkoon tokkoo gamepad walqabate qabachuu for (const gp kan paadiiwwan) { . yoo (!gp) itti fufe; // Bakka duwwaa darbi
activePads.dhiibuu ({ id: gp.id, // Maqaa too'ataa/moodeela chaappaa yeroo: raawwii.amma(), . buttooni: gp.buttons.map(b => ({ dhiibame: b.dhiibame, . gatii: b.gatii })), . siiqqeewwan: [...gp.axes]. }); } .
// Gamepads tokkollee argamuu isaa mirkaneessi yoo (!activePads.dheerina) { . console.warn("Fakkiidhaaf gamepads hin walqabsiifamne."); alert("To'ataan hin argamne!"); deebi’uu; } .
// Galmee fayyadamaa beeksisi console.log("Fakkii:", activePads); alert(Snapshot fudhatame! Qabame ${activePads.length} too'ataa(wwan).); });
Suuraaleen yeroo tokkotti haala sirrii too'ataa keetii ni qabbaneessa. 4. Galtee Hafuuraa Irra Deebiin Taphachuu Amma isa bashannansiisaa ta'eef: galtee hafuuraa irra deebi'anii taphachuu. Kunis galmee fudhatee akka waan taphattuun faantomii too'ataa fayyadamaa jiruutti mul'ataan taphachiisa.
JaavaScript irra deebi'amee taphachuuf: // ==================================================================================================== // GHOST REPLAY // ====================================================================================================
document.getElementById("irra deebi'ii taphachuu").addEventListener("cuqaasuu", () => { // Waraabbii irra deebi'ee taphachiifnu qabaachuu keenya mirkaneessi yoo (!fureemii.dheerina) { . alert("Irra deebi'ee taphachuuf waraabbii hin jiru!"); deebi’uu; } .
console.log("Irra deebi'ee tapha hafuuraa jalqabuu...");
// Yeroo hordoffii tapha walsimsiisaa mee Yeroo jalqabaa = raawwii.amma (); mee frameIndex = 0 haa ta'u;
// Looppii sochii qaamaa irra deebi'ii taphadhu tarkaanfii faankishinii() { . const amma = raawwii.amma (); const darbe = amma - Yeroo jalqabaa;
// Fureemii ammatti uumamuu qabu hunda adeemsi while (frameIndex < frames.length && frames[frameIndex].t <= darbe) { . const frame = furmaata [Indeksii furtuu];
// UI haalawwan qaree waraabame waliin haaromsi btnA.classList.toggle ("socho'aa", furtuu.buttons [0]. dhiibame); btnB.classList.toggle ("sochii", furtuu.buttons [1]. dhiibame); btnX.classList.toggle ("sochii", furtuu.buttons [2]. dhiibame);
// Agarsiisa haalaa fooyyessa haa dhiibame = []; frame.buttons.forTokkoon tokkoon ((btn, i) => { yoo (btn.dhiibame) dhiibame.dhiiba ("Button " + i); }); yoo (dhiibame.dheerina > 0) { . status.textContent = "Hafuura: " + dhiibame.walitti makamuu (", "); } .
frameIndex++; } .
// Yoo furmaata baay'ee jiraate loop itti fufi if (frameIndex < furtuuwwan.dheerina) { . gaaffiiAnimationFrame (tarkaanfii); } else { console.log("Irra deebi'ii taphadhu."xumurameera."); status.textContent = "Irra deebi'ii taphachuu xumurame"; } . } .
// Irra deebiin taphachuu jalqabi tarkaanfii (); });
Debugging xiqqoo harkaan hojjechuuf, irra deebi'ee tapha hafuuraa dabaleera. Erga session tokko waraabdee booda, replay rukutee UI’n akka taphatu ilaaluu dandeessa, almost akka phantom player pad fiigaa jiruutti. Qabduun haaraan Replay Ghost kanaaf paanaalii keessatti mul'ata.
Record rukuti, too'ataa wajjin xiqqoo jeeqa, dhaabi, sana booda irra deebi'ii taphadhu. UIn waan ati hojjette hunda qofa sagalee dhageessisa, akka hafuura galtee kee hordofutti. Maaliif dabalata kanaan dhiphachuu?
Waraabbii/erguun qorattoonni waan ta'e sirriitti akka agarsiisan salphaa taasisa. Suuraaleen yeroo muraasaaf ni qabbanaa’u, yeroo dogoggora odd ari’aa jirtu super faayidaa qaba. Irra deebiin tapha hafuuraa barnoota, sakatta'iinsa dhaqqabummaa, ykn qindaa'inoota too'annoo wal bira qabuu qofaaf baay'ee gaarii dha.
Yeroo kanatti, kana booda demoo sirrii ta’e qofa osoo hin taane, waan qabatamaan hojiitti galchuu dandeessudha. Haala Fayyadama Addunyaa Dhugaa Amma debugger kana kan waan baay’ee hojjechuu danda’u qabna. Galtee jiraataa agarsiisa, galmee galmeessa, erga, fi illee wantoota irra deebi'ee taphachiisa. Garuu gaaffiin dhugaa: dhuguma eenyutu dhimma qaba? Kun eenyuuf fayyada? Qopheessitoota Tapha Too'attoonni qaama hojiiti, garuu isaan sirreessuu? Yeroo baayyee dhukkubbii. Mee koomboo tapha lolaa, akka ↓ → + punch qorachaa jirta yaadi. Kadhachuu mannaa, yeroo lama haala wal fakkaatuun dhiibdee, al tokko waraabdee, irra deebitee taphachiifte. Raawwatame. Yookiin koodii taphattoota baay'ee kee maashinii isaanii irratti wal fakkaatu kennuu isaa ilaaluuf galmee JSON hiriyaa garee waliin jijjiirta. Sun guddaadha. Ogeessota Dhaqqabummaa Inni kun garaa kootti dhihoo dha. Namni hundi too’ataa “istaandaardii” ta’een hin taphatu. To’attoonni madaqsuu yeroo tokko tokko mallattoo ajaa’ibaa ni darbatu. Meeshaa kanaan waan ta’aa jiru sirriitti arguu dandeessa. Barsiisota, qorattoota, eenyullee. Galmeewwan qabachuu, walbira qabuu, ykn galteewwan cinaa cinaa irra deebi'anii taphachuu danda'u. Akka tasaa wanti ijaan hin mul'anne ifa ta'a. Qormaata Mirkaneessa Qulqullinaa Qorattoonni yeroo baay’ee yaadannoo akka “Asitti buttooni mashed godhee cabe” jedhu barreessu. Baay'ee nama hin gargaaru. Amma? Dhiibbaa sirrii qabachuu, galmee erguu fi erguu danda'u. Tilmaama hin qabu. Barsiisota Yoo barnoota ykn YouTube vids hojjechaa jirtan ta’e, ghost replay warqeedha. Kakuu jecha jechaatti, “Kunoo waanan too’ataa wajjin hojjedhe,” jechuu dandeessa, UI’n immoo akka ta’u agarsiisa. Ibsa karaa ifa taasisa. Taphoota bira darbee Eeyyee, kun waa’ee taphoota qofa miti. Namoonni too'attoota roobootii, pirojektoota aartii fi interfeesii dhaqqabummaa fayyadamaniiru. Yeroo hunda dhimma wal fakkaatu: dhugumatti browser maal argaa jira? Kana waliin tilmaamuun si hin barbaachisu. Xumura Galtee too'ataa sirreessuun yeroo hunda akka balali'uu jaamaa ta'ee itti dhaga'ama ture. DOM ykn CSS irraa adda ta’ee, inspeektarri gamepads of keessaa qabu hin jiru; lakkoofsa raw qofa konsoolii keessa jiru, salphaatti sagalee keessaa bada. Sarara dhibba muraasa HTML, CSS, fi JavaScript tiin waan adda ta'e ijaarre:
Sirreessaa mul'ataa kan galteewwan hin mul'anne akka mul'atan godhu. Sirna CSS layered kan UI qulqulluu fi sirreeffamuu danda'u eegu. Tuuta fooyya'iinsa (galchuu, erguu, suuraa, irra deebi'anii taphachuu hafuuraa) kanneen demoo irraa gara meeshaa developer ol guddisan.
Pirojektiin kun humna Web Platform’s CSS Cascade Layers keessatti kalaqa xiqqoo waliin walitti makuun hangam akka deemtu agarsiisa. Meeshaan amma guutummaatti ibse kun madda banaa dha. Repo GitHub clone gochuu fi ofii keetii yaalu dandeessa. Garuu caalaatti kan mataa keetii gochuu dandeessa. Laayiyeroota mataa keetii itti dabali. Loojikii irra deebi'anii taphachuu mataa keessanii ijaaraa. Prototype tapha keessanii wajjin walitti makuu. Yookaan immoo karaa ani hin yaadneen illee itti fayyadamuu. Barsiisuuf, dhaqqabummaaf, ykn xiinxala daataatiif. Dhuma irratti, kun waa’ee gamepads sirreessuu qofa miti. Innis waa’ee galtee dhokataa irratti ifa ibsuu, fi developers’f ofitti amanamummaa haardwaara weebiin ammallee guutummaatti hin hammanne waliin hojjechuuf kennuudha. Kanaafuu, too'ataa kee galchi, gulaalaa kee bani, fi yaalii jalqabi. Browser kee fi CSS kee dhuguma maal galmaan gahuu akka danda'u si ajaa'ibuu danda'a.