Xa uplaga isilawuli, ucudisa amaqhosha, ushukumise izinti, tsala izichukumiso… kwaye njengomphuhlisi, awuboni nalinye kuyo. Isikhangeli siyayichola, ngokuqinisekileyo, kodwa ngaphandle kokuba ufaka amanani kwi-console, ayibonakali. Leyo yintloko nge-Gamepad API. Sele kuyiminyaka, kwaye eneneni inamandla kakhulu. Unokufunda amaqhosha, izibonda, izitshizi, imisebenzi. Kodwa abantu abaninzi abayichukumisi. Ngoba? Ngenxa yokuba akukho mpendulo. Akukho panel kwizixhobo zomphuhlisi. Ayikho indlela ecacileyo yokwazi ukuba umlawuli wenza naloo nto ucinga ngayo. Kuvakala ngathi kubhabha ubumfama. Oko kwandixaka ngokwaneleyo ukuba ndakhe isixhobo esincinci: Gamepad Cascade Debugger. Endaweni yokujonga imveliso ye-console, ufumana umbono ophilayo, osebenzisanayo womlawuli. Cinezela into kwaye isabela kwisikrini. Kwaye ngeCSS Cascade Layers, izitayile zihlala zicwangcisiwe, ke kucocekile ukulungisa ingxaki. Kule post, ndiza kukubonisa ukuba kutheni abalawuli be-debugging iyintlungu enje, indlela i-CSS inceda ngayo ukuyicoca, kunye nendlela onokuyakha ngayo i-debugger ebonakalayo kwiiprojekthi zakho.

Nokuba uyakwazi ukuzifaka zonke, uya kukhawuleza uphele nge-spam yeconsole engafundekiyo. Umzekelo: [0,0,1,0,0,0.5,0,...] [0,0,0,0,1,0,0,...] [0,0,1,0,0,0,0,...]

Ngaba uyazi ukuba leliphi iqhosha belicofa? Mhlawumbi, kodwa emva kokuba ucinezele amehlo akho kwaye ulahlekelwe ngamagalelo ambalwa. Ke, hayi, ukulungisa ingxaki akuzi lula xa kuziwa kumagalelo okufunda. Ingxaki yesi-3: Ukunqongophala koLwakhiwo Nokuba uphosa kunye i-visualizer ekhawulezayo, izitayile zinokonakala ngokukhawuleza. Ukungagqibeki, okusebenzayo, kunye nokulungiswa kweempazamo kunokugqithelana, kwaye ngaphandle kolwakhiwo olucacileyo, iCSS yakho iba brittle kwaye kunzima ukuyandisa. I-CSS Cascade Layers inokunceda. Bahlulahlula izitayile zibe "ngamaleya" aodolwe ngokubaluleka, ukuze uyeke ukulwa ngokuthe ngqo kunye nokuqikelela, "Kutheni le nto isimbo sam sokulungisa ingxaki singabonisi?" Endaweni yoko, ugcina iinkxalabo ezahlukeneyo:

Isiseko: Umgangatho womlawuli, ukubonakala kokuqala. Iyasebenza: Iimpawu eziphambili zamaqhosha acofayo kunye neentonga ezishukumayo. Debug: Ukwaleka kwabaphuhlisi (umzekelo, ukufunda amanani, izikhokelo, njalo njalo).

Ukuba besinokuchaza iileya kwi-CSS ngokwale nto, siya kuba: /* esezantsi ukuya kokuphambili okuphezulu */ @ isiseko soluhlu, siyasebenza, lungisa iimpazamo;

@ isiseko { /*... */ }

@ umaleko osebenzayo { /*... */ }

@ulungiso lweempazamo { /*... */ }

Kuba umaleko ngamnye uqokelele ngokuqikelelwayo, uhlala usazi ukuba yeyiphi imigaqo ephumelelayo. Oko kuqikelelwa kwenza ukulungisa ingxaki kungabi lula, kodwa kube lula ukulawuleka. Siyigubungele ingxaki (engabonakaliyo, igalelo elimdaka) kunye nendlela (i-debugger ebonakalayo eyakhiwe ngeCascade Layers). Ngoku siza kuhamba ngenyathelo ngenyathelo ukwenza i-debugger. Ingcamango yeDebugger Eyona ndlela ilula yokwenza igalelo elifihliweyo libonakale kukuzoba nje kwiscreen. Yiloo nto eyenziwa ngulo mlungisi. Amaqhosha, izitshixo, kunye nezinti zovuyo zonke zifumana umbono.

Cinezela A: Isangqa sikhanyisa. Qhuba intonga: Isangqa siyatyibilika. Tsala isivusi phakathi embindini: Ibha igcwala embindini.

Ngoku awujongi 0 kunye no-1, kodwa ngokwenene ubukele umlawuli esabela bukhoma. Ewe kunjalo, nje ukuba uqalise ukupakisha kumazwe afana nokungagqibekanga, ucinezele, ucofe ulwazi, mhlawumbi nendlela yokurekhoda, i-CSS iqala ukuba nkulu kwaye ibenzima ngakumbi. Kulapho iileya ze-cascade ziza luncedo. Nanku umzekelo okhutshwe phantsi: @ isiseko { .iqhosha { imvelaphi: #222; Umda-radius: 50%; ububanzi: 40px; ubude: 40px; } }

@ umaleko osebenzayo { .iqhosha.licinezelwe { indawo yangasemva: #0f0; /* luhlaza oqaqambileyo */ } }

@ulungiso lweempazamo { .iqhosha::emva { umxholo: attr(ixabiso ledatha); ubungakanani befonti: 12px; umbala: #fff; } }

Ulungelelwaniso lomaleko lubalulekile: isiseko → esebenzayo → ukulungisa ingxaki.

isiseko sitsala isilawuli. izibambo ezisebenzayo zicinezelwe. debug iphosa kumanqwanqwa.

Ukuyiqhekeza ngolu hlobo kuthetha ukuba awulwi iimfazwe ezingaqhelekanga. Umaleko ngamnye unendawo yawo, kwaye uhlala uyazi ukuba yintoni ephumelelayo. Ukuyakha Ngaphandle Makhe sifumane into kwiscreen kuqala. Akufuneki ukuba ibonakale ilungile-ifuna nje ukubakho ukuze sibe nento esinokusebenza ngayo.

I-Gamepad Cascade Debugger

A
B
X

Toggle Debug

Idebugger ayisebenzi

Oko ngokwenene ziibhokisi nje. Ayinamdla okwangoku, kodwa isinika izibambo zokubamba kamva ngeCSS kunye neJavaScript. Kulungile, ndisebenzisa i-cascade layers apha kuba igcina izinto zicwangcisiwe nje ukuba wongeze amanye amazwe. Nantsi indlela engaqhelekanga:

/* ==================================== I-CASCADE LEERS SETUP Imiba yolandelelwano: isiseko → esebenzayo → ukulungisa ingxaki ===================================== */

/* Chaza ulungelelwaniso lomaleko ngaphambili */ @ isiseko soluhlu, siyasebenza, lungisa iimpazamo;

/* Uluhlu 1: Izitayile ezisisiseko- inkangeleko engagqibekanga */ @ isiseko { .iqhosha { imvelaphi: #333; Umda-radius: 50%; ububanzi: 70px; ubude: 70px; bonisa: flex; thethelela-umxholo: iziko; lungelelanisa-izinto: iziko; }

.nqumama { ububanzi: 20px; ubude: 70px; imvelaphi: #333; bonisa: ibhloko engaphakathi; } }

/* Uluhlu 2: Iimeko ezisebenzayo- iphatha amaqhosha acinezelweyo */ @ umaleko osebenzayo { .iqhosha.elisebenzayo { indawo yangasemva: #0f0; /* Buhlaza obuqaqambileyo xa ucinezelwe */ ukuguqula: isikali(1.1); /* Yandisa kancinane iqhosha */ }

.nqumama.esebenzayo { indawo yangasemva: #0f0; ukuguqula: isikaliY(1.1); /* Izolula ngokuthe nkqo xa icinezelwe */ } }

/* Umaleko wesi-3: Ukulungiswa kwempazamo - ulwazi lomphuhlisi */ @ulungiso lweempazamo { .iqhosha::emva { umxholo: attr(ixabiso ledatha); /* Ibonisa ixabiso lamanani */ ubungakanani befonti: 12px; umbala: #fff; } }

Ubuhle bale ndlela kukuba uluhlu ngalunye lunenjongo ecacileyo. Umaleko wesiseko awunakuze ubhale ngaphezulu osebenzayo, kwaye osebenzayo awunakuze ubhale ngaphezulu i-debug, nokuba yeyiphi na into ethile. Oku kuphelisa iimfazwe ezithile zeCSS ezihlala zibhuqa izixhobo. Ngoku kubonakala ngathi amanye amaqela ahleli kwimvelaphi emnyama. Ukunyaniseka, akukho kubi kakhulu.

Ukongeza iJavaScript Ixesha leJavaScript. Apha kulapho umlawuli eneneni esenza into. Siza kuyenza inyathelo ngenyathelo. Inyathelo loku-1: Misela uLawulo lweSizwe Okokuqala, sifuna izinto eziguquguqukayo ukulandelela imeko ye-debugger: // ===================================== // ULAWULO LWEZWE // =====================================

yeka ukubaleka = bubuxoki; // Ilanda ukuba ingaba idebugger iyasebenza na vumela i-rafId; // Igcina isicelo se-AnimationFrame ID yokurhoxiswa

Ezi ziguquguqukayo zilawula i-animation loop efunda ngokuqhubekayo igalelo le-gamepad. Inyathelo 2: Bamba iiReferensi zeDOM Okulandelayo, sifumana iimbekiselo kuzo zonke izinto ze-HTML esiza kuzihlaziya: // ===================================== // IREferensi ye-DOM ye-DOM // =====================================

const btnA = document.getElementById("btn-a"); const btnB = document.getElementById("btn-b"); const btnX = document.getElementById("btn-x"); const pause1 = document.getElementById("pause1"); const pause2 = document.getElementById("pause2"); const status = document.getElementById("status");

Ukugcina ezi referensi ngaphambili kusebenza ngakumbi kunokubuza i-DOM ngokuphindaphindiweyo. Inyathelo 3: Yongeza i-Keyboard Fallback Kuvavanyo ngaphandle kwesilawuli esibonakalayo, siza kwenza imephu yezitshixo zebhodi yezitshixo kumaqhosha: // ===================================== // I-KEYBOARD FALLBACK (yokuvavanya ngaphandle komlawuli) // =====================================

const keyMap = { "a": btnA, "b": btnB, "x": btnX, "p": [pause1, phumla2] // 'p' isitshixo silawula zombini iibar zokumisa };

Oku kusenza sivavanye i-UI ngokucofa izitshixo kwibhodi yezitshixo. Inyathelo lesi-4: Yenza iLuphu yoHlaziyo oluPhambili Apha kulapho kwenzeka khona umlingo. Lo msebenzi uqhuba ngokuqhubekayo kwaye ufunda imeko ye-gamepad: // ===================================== // INGXELO YOMDLALO WOKUHLAZIYA LOOP // =====================================

uhlaziyo lomsebenziGamepad () { // Fumana zonke iipadi zomdlalo eziqhagamshelweyo const gamepads = navigator.getGamepads (); ukuba (!iiphedi zemidlalo) ziyabuya;

// Sebenzisa i-gamepad yokuqala eqhagamshelweyo const gp = iipadi zokudlala [0];

ukuba (gp) { // Hlaziya iqhosha lithetha ngokucofa iklasi "esebenzayo". btnA.classList.toggle("active", gp.buttons[0].cofaziwe); btnB.classList.toggle("active", gp.buttons[1].cofaziwe); btnX.classList.toggle("active", gp.buttons[2].cofaziwe);

// Bamba iqhosha lokumisa (iqhosha lesalathisi 9 kubalawuli abaninzi) const pauseIcinezelwe = gp.buttons[9].icinezelwe; pause1.classList.toggle("active", pausePressed); pause2.classList.toggle("active", pauseCiniziwe);

// Yakha uluhlu lwamaqhosha acinezelweyo ngoku ukubonisa ubume yeka icinezelwe = []; gp.buttons.forEach((btn, i) => { ukuba (btn.cofaziwe)cofa.tyhala("Iqhosha" + i); });

// Hlaziya isimo sombhalo ukuba nawaphi na amaqhosha acinezelwe ukuba (cofa.ubude > 0) { status.textContent = "Icinezelwe:" + pressed.join(", "); } }

// Qhubeka iluphu ukuba idebugger iyasebenza ukuba (iyabaleka) { rafId = requestAnimationFrame(updateGamepad); } }

Indlela ye classList.toggle () yongeza okanye isusa udidi olusebenzayo ngokusekelwe ekubeni iqhosha licinezelwe, nto leyo eyenza i CSS yethu izimbo. Inyathelo 5: Phatha iMisitho yekhibhodi Aba baphulaphuli bomsitho benza ukuba ikhibhodi ibuyele umva isebenze: // ===================================== // IZIPHATHI ZE-KEYBOARD EVENT // =====================================

document.addEventListener("isitshixo", (e) => { ukuba (isitshixo seMap[e.key]) { // Bamba izinto enye okanye ezininzi ukuba (Array.isArray(keyMap[e.key])) { keyMap[e.key].forEach(el => el.classList.add("esebenzayo")); } enye { keyMap[e.key].classList.yongeza("esebenzayo"); } status.textContent = "Iqhosha licinezelwe: " + e.key.toUpperCase(); } });

document.addEventListener("isitshixo", (e) => { ukuba (isitshixo seMap[e.key]) { // Susa imo esebenzayo xa isitshixo sikhululiwe ukuba (Array.isArray(keyMap[e.key])) { keyMap[e.key].forEach(el => el.classList.remove("esebenzayo")); } enye { keyMap[e.key].classList.remove("esebenzayo"); } status.textContent = "Iqhosha likhululiwe: " + e.key.toUpperCase(); } });

Inyathelo 6: Yongeza iQalisa/Yeka uLawulo Okokugqibela, sifuna indlela yokuguqula nokuvala i-debugger: // ===================================== // QHUBEKA I-DEBUGGER IVULA/YIVILE // =====================================

document.getElementById("toggle").addEventListener("cofa", () => { ukubaleka = !ukubaleka; // Flip imo esebenzayo

ukuba (iyabaleka) { status.textContent = "Idebugger iyasebenza..."; updateGamepad(); // Qala uhlaziyo lwelophu } enye { status.textContent = "Idebugger ayisebenzi"; cancelAnimationFrame(rafId); // Misa iluphu } });

Ke ewe, cofa iqhosha kwaye liyakhazimla. Tyhala intonga kwaye iyashukuma. Yiyo leyo. Enye into: amaxabiso akrwada. Ngamanye amaxesha ufuna nje ukubona amanani, hayi izibane.

Ngeli nqanaba, kufuneka ubone:

Isilawuli esilula sesikrini, Amaqhosha asabelayo njengoko usebenzisana nawo, kunye Ufundo lolungiso lweempazamo olukhethiweyo olubonisa izalathi zeqhosha elicinezelweyo.

Ukwenza oku kungabonakali kancinci, nantsi idemo ekhawulezayo yesilawuli sesikrini esiphendula ngexesha lokwenyani:

Ngoku, ukucofa uQalisa ukuRekhoda kufakwa yonke into de ube ubethe Yeka ukuRekhoda. 2. Ukuthunyelwa kweDatha kwi-CSV/JSON Nje ukuba sibe nelogi, siya kufuna ukuyigcina.

Thumela ngaphandle iJSON Thumela ngaphandle CSV

Inyathelo 1: Yenza uMncedi wokuKhuphela Okokuqala, sifuna umsebenzi oncedisayo ophethe ukhuphelo lweefayile kwibrawuza: // ===================================== // IFAYILE YOKUKHUPHELA UMNCEDISI // =====================================

umsebenzi wokhuphelo lweFayile(igama lefayile, umxholo, uhlobo = "okubhaliweyo/okucacileyo") { // Yenza iblobhu kumxholo const blob = iBlob entsha ([umxholo], {uhlobo}); const url = URL.createObjectURL(blob);

// Yenza ikhonkco lokukhuphela okwethutyana kwaye ucofe const a = document.createElement("a"); a.href = url; a.download = igama lefayile; a.cofa();

// Coca into ye-URL emva kokukhuphela setTimeout(() => URL.revokeObjectURL(url), 100); }

Lo msebenzi usebenza ngokudala iBlob (into yebhinary enkulu) ukusuka kwidatha yakho, ukuvelisa i-URL yethutyana kuyo, kwaye ucofa ngokucofa ikhonkco lokukhuphela. Ukucoca kuqinisekisa ukuba asivuzi inkumbulo. Inyathelo 2: Phatha iJSON Export I-JSON igqibelele ukugcina ubume bedatha epheleleyo:

// ===================================== // UKUTHUMELA NJENGOKO JSON // =====================================

document.getElementById("export-json").addEventListener("cofa", () => { // Khangela ukuba kukho nantoni na ukuthumela ngaphandle ukuba (!amafreyimu.ubude) { console.warn("Akukho rekhodisho lukhoyo lokuthumela ngaphandle."); buya }

// Yenza umthwalo wokuhlawula ngemethadatha kunye nezakhelo umthwalo ohlawulayo = { yakhiweNge: Umhla omtsha().toISOString(), izakhelo };

// Khuphela ngokufomathiweyo kwe-JSON Khuphela iFayile( "gamepad-log.json", JSON.stringify(umthwalo wokuhlawula, null, 2), "isicelo / json" ); });

Ifomathi ye-JSON igcina yonke into icwangcisiwe kwaye icazululeka ngokulula, iyenza ilungele ukulayishwa kwakhona kwizixhobo ze-dev okanye ukwabelana nabalingane beqela. Inyathelo 3: Phatha i-CSV Export Kuthunyelo ngaphandle kwe-CSV, kufuneka sithambise idatha ye-hierarchical ibe yimigca kunye nekholamu:

//==================================== // UKUTHUMELA NJENGE-CSV // =====================================

document.getElementById("export-csv").addEventListener("cofa", () => { // Khangela ukuba kukho nantoni na ukuthumela ngaphandle ukuba (!amafreyimu.ubude) { console.warn("Akukho rekhodisho lukhoyo lokuthumela ngaphandle."); buya }

// Yakha umqolo weheader ye-CSV (iikholamu zesitampu sexesha, onke amaqhosha, zonke izembe) const headerButtons = izakhelo[0].buttons.map((_, i) => btn${i}); const headerAxes = izakhelo[0].axes.map((_, i) => axis${i}); const header = ["t", ...headerButtons, ...headerAxes].join(",") + "\n";

// Yakha imigca yedatha ye-CSV const imiqolo = izakhelo.map (f => { const btnVals = f.buttons.map(b => b.value); buyisela [f.t, ...btnVals, ...f.axes].join(","); }). dibanisa("\n");

// Khuphela njenge CSV downloadFile("gamepad-log.csv", header + rows, "text/csv"); });

I-CSV ikrelekrele kuhlalutyo lwedatha kuba ivula ngokuthe ngqo kwi-Excel okanye i-Google Sheets, ikuvumela ukuba wenze iitshathi, idatha yokucoca, okanye iipateni zokubona ngokubonakalayo. Ngoku ekubeni amaqhosha athumela ngaphandle engaphakathi, uya kubona ezimbini iinketho ezintsha kwiphaneli: Thumela i-JSON kunye nokuThumela ngaphandle kwe-CSV. I-JSON ilungile ukuba ufuna ukuphosa ilog ekrwada ngasemva kwizixhobo zakho ze-dev okanye ujikeleze isakhiwo. I-CSV, kwelinye icala, ivula ngqo kwi-Excel okanye i-Google Sheets ukuze ukwazi ukutshati, ukuhluza, okanye uthelekise amagalelo. Lo mfanekiso ulandelayo ubonisa ukuba indawo yolawulo ijongeka njani ngolawulo olongezelelweyo.

3. Isishwankathelo System Ngamanye amaxesha awufuni ukurekhodwa ngokupheleleyo, "umfanekiso wesikrini" okhawulezayo weendawo zokungenisa. Kulapho iqhosha lokuthatha i-Snapshot linceda.

Thatha umfanekiso

Kwaye iJavaScript:

// ===================================== // THATHA ISIFANEKISO // =====================================

document.getElementById("snapshot").addEventListener("cofa", () => { // Fumana zonke iipadi zomdlalo eziqhagamshelweyo const pads = navigator.getGamepads (); const activePads = [];

// Londoloza kwaye ubambe imeko ye-gamepad nganye eqhagamshelweyo ye (const gp yeepads) { ukuba (!gp) qhubeka; // Tsiba iindawo zokubeka ezingenanto

activePads.push({ id: gp.id, // Controller name/model isitampu sexesha: performance.now (), amaqhosha: gp.buttons.map(b => ({ icinezelwe: b.icinezelwe, ixabiso: b.xabiso })), izembe: [...gp.axes] }); }

// Jonga ukuba kukho naziphi na iipads ezifunyenweyo ukuba (!activePads.length) { console.warn("Azikho iipads eziqhagamshelwe kwisnapshot."); isilumkiso("Akukho mlawuli ufunyenweyo!"); buya }

// Ngena kwaye wazise umsebenzisi console.log("Snapshot:", activePads); isilumkiso(Umfanekiso okhawulezayo uthathiwe! Uthathiwe ${activePads.length} isilawuli(s).); });

Izifinyezo zimisa eyona meko yomlawuli wakho ngexesha elinye. 4. Ghost Input Replay Ngoku kumnandi: i-ghost input replay. Oku kuthatha ilogi kwaye idlale kwakhona ngokubonakalayo ngokungathi umdlali we-phantom usebenzisa umlawuli.

Enjoyed This Article?

Get weekly tips on growing your audience and monetizing your content — straight to your inbox.

No spam. Join 138,000+ creators. Unsubscribe anytime.

Create Your Free Bio Page

Join 138,000+ creators on Seemless.

Get Started Free