'I he taimi 'oku ke plug ai ha pule, 'Oku ke mash 'a e ngaahi buttons, hiki 'a e ngaahi va'akau, toho 'a e ngaahi triggers... pea ko ha developer, 'Oku 'ikai ke ke sio ki ha taha 'o ia. Ko e browser ‘oku ne to’o ia, pau, ka tukukehe kapau ‘oku ke logging ‘a e ngaahi fika ‘i he console, ‘oku ‘ikai ke hā ia. Ko e mamahi ‘ulu ia mo e Gamepad API.
Kuo laui ta’u ‘ene ‘i ai, pea ko hono mo’oni ‘oku fu’u malohi ‘aupito. Te ke lava ʻo lau ʻa e ngaahi pātene, ngaahi vaʻakau, ngaahi fakatupu, ʻa e ngaahi ngāue. Ka ko e tokolahi taha ‘o e kakaí ‘oku ‘ikai ke nau ala ki ai. Ko e hā hono ʻuhingá? He ‘oku ‘ikai ha tali. 'Ikai ha panel 'i he ngaahi me'angaue 'o e kau fakalakalaka. ‘Ikai ha founga mahino ke ‘ilo’i pe ‘oku a’u ‘o fai ‘e he pule ‘a e me’a ‘oku ke fakakaukau ki ai. ʻOku ongo ia ʻo hangē ha lele kuí.
Na'e bugged au fe'unga ke langa ha ki'i me'angaue: Gamepad Cascade Debugger. Kae 'ikai ke sio fakamama'u ki he output 'o e console, 'Oku ke ma'u ha mo'ui, fetu'utaki 'a e vakai 'o e pule. Lomiʻi ha meʻa pea ʻoku ne tali ʻi he screen. Pea mo e CSS Cascade Layers, ‘oku nofo fokotu’utu’u ‘a e ngaahi sitaila, ko ia ‘oku ma’a ange ke debug.
‘I he pou ko ‘eni, Te u fakahaa’i atu ‘a e ‘uhinga ‘oku mamahi ai ‘a e debugging controllers, ‘a e founga ‘oku tokoni ai ‘a e CSS ke fakama’a ia, pea mo e founga te ke lava ai ‘o langa ha debugger faka’ata ‘oku lava ke toe faka’aonga’i ki ho’o ngaahi poloseki ‘a’au.
Neongo kapau ‘oku ke lava ‘o log kotoa kinautolu, te ke vave ‘o iku ki he spam console ‘oku ‘ikai lava ke lau. Hangē ko ʻení:
[0,0,1,0,0,0.5,0,...]
[0,0,0,0,1,0,0,...]
[0,0,1,0,0,0,0,...]
Te ke lava ʻo tala pe ko e hā e button naʻe lomiʻí? Mahalo, ka hili pe ho'o fakamafasia'i ho mata pea mole ha ngaahi inputs si'isi'i. Ko ia, ‘ikai, ‘oku ‘ikai ke faingofua ‘a e debugging ‘i he taimi ‘oku hoko mai ai ki hono lau ‘o e ngaahi inputs.
Palopalema 3: Si'isi'i 'o e Fa'unga
Neongo kapau te ke lī fakataha ha visualizer vave, 'e lava ke vave 'a e ngaahi sitaila ke ma'u 'a e messy. 'E lava ke 'overlap 'a e ngaahi tu'unga 'o e default, active, mo e debug, pea 'i he 'ikai ha fokotu'utu'u mahino, 'oku hoko ho'o CSS 'o brittle mo faingata'a ke fakalahi.
'E lava ke tokoni 'a e ngaahi la'i CSS Cascade. ‘Oku nau fakakulupu ‘a e ngaahi sitaila ki he “ngaahi la’i” ‘oku fakahokohoko ‘o fakatatau ki he me’a ‘oku fakamu’omu’a, ko ia ‘oku ke tuku ‘a e tau’i ‘o e specificity mo e mate’i, “Ko e ha ‘oku ‘ikai ke fakahaa’i ai ‘eku sitaila debug?” Ka, ʻokú ke tauhi ha ngaahi hohaʻa kehekehe:
Base: Ko e tu’unga ‘o e pule, ‘uluaki fōtunga.
Active: Ngaahi meʻa mahuʻinga ki he ngaahi pātene kuo lomiʻí mo e ngaahi vaʻakau kuo hiki.
Debug: Ngaahi 'overlays ki he kau developers (e.g., ngaahi lau fakafika, ngaahi fakahinohino, mo e me'a pehe).
Kapau te tau faka’uhinga’i ‘a e ngaahi la’i ‘i he CSS ‘o fakatatau ki he me’a ni, te tau ma’u:
/* ma'ulalo taha ki he ma'olunga taha 'o e fakamu'omu'a */
@layer makatu'unga, ngaue, debug;
@layer makatu'unga {
/* ... */
}
@layer 'oku ngaue {
/* ... */
}
@debug 'o e la'i {
/* ... */
}
Koe'uhi ko e layer takitaha 'oku stacks predictably, 'Oku ke 'ilo ma'u pe 'a e ngaahi tu'utu'uni 'oku ikuna. 'Oku 'ai 'e he predictability ko ia 'a e debugging 'oku 'ikai ngata pe 'i he faingofua ange, ka 'oku mo'oni 'a e pule'i.
Kuo mau ‘ufi’ufi ‘a e palopalema (ta’e hā mai, messy input) mo e founga (ko ha debugger faka’ata na’e langa ‘aki ‘a e Cascade Layers). Ko ‘eni te tau lue ‘i he founga fakasitepu ke langa ‘a e debugger.
Ko e fakakaukau 'o e Debugger .
Ko e founga faingofua taha ke 'asi 'a e input fufuu ko hono tohi'i pe ia 'i he screen. Ko e me’a ia ‘oku fai ‘e he debugger ko ‘eni. Ko e ngaahi pātení, ngaahi meʻa fakaʻaiʻaí, mo e ngaahi joystick ʻoku nau maʻu kotoa ha fakaʻata.
Lomiʻi ʻa e A: ʻOku ulo ha foʻi takai.
Tuku ʻa e vaʻakaú: ʻOku luelue holo ʻa e takaí.
Toʻo ha trigger ʻi he vaeuaʻangá: ʻOku fakafonu ʻe ha pa ʻi he vaeuaʻangá.
Ko ‘eni ‘oku ‘ikai ke ke sio fakamama’u ki he 0s mo e 1s, ka ko hono mo’oni ‘oku ke siofi ‘a e tali mo’ui ‘a e pule.
Ko e mo'oni, 'i he taimi 'oku ke kamata ai ke piling 'i he ngaahi siteiti hange ko e default, lomi'i, debug info, mahalo na'a mo ha founga lekooti, 'Oku kamata ke ma'u 'e he CSS 'a e lahi ange mo e faingata'a ange. Ko e feitu’u ia ia ‘oku ‘aonga ai ‘a e ngaahi la’i cascade. Ko e fakatātā ‘eni kuo to’o hifo:
@layer makatu'unga {
.pātene {
ʻi he puipuituʻá: #222;
kauʻāfonua-ʻata: 50%;
laulahi: 40px;
maʻolunga: 40px;
}
}
@debug 'o e la'i {
.button::hili {
kakano: attr (fakamatala-mahu'inga);
lahi-mataʻitohi: 12px;
lanu: #fff;
}
}
'Oku mahu'inga 'a e tu'utu'uni 'o e layer: makatu'unga → ngaue → debug.
base 'oku ne to'o 'a e pule.
'oku to'oto'o malohi 'a e ngaahi tu'unga lomi'i.
debug 'oku ne lī 'i he ngaahi 'overlay.
Ko hono motuhi ia ‘o hange ko ‘eni ‘oku ‘uhinga ia ‘oku ‘ikai ke ke tau’i ‘a e ngaahi tau specificity ngali kehe. ʻOku ʻi ai hono feituʻu ʻo e laʻi takitaha, pea ʻokú ke ʻiloʻi maʻu pē ʻa e meʻa ʻoku ikuná.
Ko hono langa hake ia
Tau ‘uluaki ma’u ha me’a ‘i he screen. ‘Oku ‘ikai fiema’u ke hā lelei — fiema’u pē ke ‘i ai ke ma’u ha me’a ke tau ngāue ki ai.
Ko e Fakaleleiʻi ʻo e Kasikaiti ʻo e Vaʻingá
A
B
X
'Oku 'ikai ke ngaue 'a e fakatonutonu
Ko e mo’oni ko e ngaahi puha pe ia. 'Oku te'eki ke fakafiefia, ka 'oku ne 'omi kiate kitautolu 'a e ngaahi to'oto'o ke puke 'amui ange 'aki 'a e CSS mo e JavaScript.
Sai, ‘Oku ou faka’aonga’i ‘a e ngaahi la’i cascade heni koe’uhi he ‘oku ne tauhi ‘a e ngaahi me’a ke fokotu’utu’u ‘i he taimi ‘oku ke tanaki atu ai ha ngaahi siteiti lahi ange. Ko e paasi fefeka ‘eni:
/* =========================== =
FOKOTU'U 'O E NGAAHI LA'I 'O E CASCADE
Ngaahi me'a 'o e 'ota: makatu'unga → ngaue → debug
*/
/* Faka'uhinga'i 'a e layer 'o e upfront */
@layer makatu'unga, ngaue, debug;
.tuʻu {
laulahi: 20px;
maʻolunga: 70px;
ʻi he puipuituʻá: #333;
faka'ali'ali: 'i he laine-poloka;
}
}
/* Layer 2: Ngaahi tu'unga 'oku ngaue - to'oto'o 'a e ngaahi buttons kuo lomi'i */
@layer 'oku ngaue {
.button.ngaue {
'i he muimui'i: #0f0; /* Lanumata ngingila 'i he taimi 'oku lomi'i ai */
liliu: me'afua(1.1); /* Ki'i fakalahi 'a e button */
}
.tu'u.ngaue {
'i he muimui'i: #0f0;
liliu: fuaY (1.1); /* 'Oku ne fakaloloa fakahangatonu 'i he taimi 'oku lomi'i ai */
}
}
/* La'i 3: Debug 'o e ngaahi 'overlays - fakamatala 'o e developer */
@debug 'o e la'i {
.button::hili {
kakano: attr (fakamatala-mahu'inga); /* Fakahaa'i 'a e mahu'inga fakafika */
lahi-mataʻitohi: 12px;
lanu: #fff;
}
}
Ko e faka'ofo'ofa 'o e founga ko 'eni ko e la'i takitaha 'oku 'i ai 'a e taumu'a mahino. 'E 'ikai lava 'e he layer 'o e makatu'unga 'o faka'auha 'a e malohi, pea 'e 'ikai lava 'e he malohi 'o faka'auha 'a e debug, tatau ai pe pe ko e specificity. 'Oku faka'auha 'e he me'a ni 'a e ngaahi tau 'o e CSS specificity 'oku fa'a fakamamahi'i 'a e ngaahi me'angaue debugging.
Ko ʻeni ʻoku hangē ʻoku tangutu ha ngaahi kulupu ʻe niʻihi ʻi ha ʻata fakapoʻuli. Fakamoʻoni, ʻoku ʻikai fuʻu kovi.
Ko hono tānaki atu ʻo e JavaScript .
Taimi ʻo e JavaScript. Ko e feituʻu ʻeni ʻoku fai moʻoni ai ʻe he puleʻangá ha meʻa. Te tau langa ‘eni ‘i he sitepu ki he sitepu.
Sitepu 1: Fokotuʻu ʻa e Puleʻanga ʻo e Puleʻangá
‘Uluakí, ‘oku tau fie ma‘u ‘a e ngaahi me‘a kehekehe ke muimui‘i ‘a e tu‘unga ‘o e debugger:
// ============================ =
// PULE'I 'O E PULE'ANGA
// ============================ =
tuku ke lele = loi; // Muimui'i pe 'oku ngaue 'a e debugger .
tuku ke rafId; // 'Oku ne tanaki 'a e ID 'o e koleAnimationFrame ki hono kaniseli .
'Oku pule'i 'e he ngaahi kehekehe ko 'eni 'a e loop 'o e mo'ui 'oku hokohoko atu hono lau 'o e gamepad input.
Sitepu 2: Puke 'a e ngaahi fakamo'oni DOM .
Hoko atu, ‘Oku tau ma’u ‘a e ngaahi lave ki he ngaahi ‘elemeniti HTML kotoa pe te tau fakafo’ou:
// ============================ =
// NGAAHI TOHI 'A E 'ELEMENITI 'O E DOM
// ============================ =
const btnA = tohi.ma'u 'a e 'elemenitiById ("btn-a");
const btnB = tohi.ma'u 'a e 'ElemēnitiById ("btn-b");
const btnX = tohi.ma'u 'a e 'elemeniti 'i he 'Id ("btn-x");
const tu'u1 = tohi.ma'u 'a e 'ElementById ("tu'u1");
const tu'u2 = tohi.ma'u 'a e 'ElementById ("tu'u2");
const tu'unga = tohi.ma'u 'ElementById ("tu'unga");
Ko hono tanaki 'o e ngaahi fakamo'oni ko 'eni 'i 'olunga 'i mu'a 'oku lelei ange ia 'i hono toutou fehu'i 'o e DOM.
Sitepu 3: Tānaki atu ʻa e Fallback ʻo e Kiipioti .
Ki he sivi ‘o ‘ikai ha pule fakatu’asino, te tau mape’i ‘a e ngaahi kī ‘o e keyboard ki he ngaahi button:
// ============================ =
// KEYBOARD FALLBACK (ki he sivi 'o 'ikai ha pule)
// ============================ =
const Mape kī = {
"a": btnA,
"b": btnB,
"x": btnX,
"p": [tu'u1, tu'u2] // 'p' kī 'oku ne pule'i 'a e ongo pa tu'u
};
'Oku faka'ata 'e he me'a ni ke tau sivi'i 'a e UI 'aki hono lomi'i 'a e ngaahi kī 'i ha keyboard.
Sitepu 4: Fa'u 'a e Loop Fakafo'ou Tefito .
Ko e feitu’u ‘eni ‘oku hoko ai ‘a e me’a fakaofo. 'Oku lele hokohoko 'a e ngaue ko 'eni pea lau 'a e tu'unga gamepad:
// ============================ =
// LOOP FAKAFO'OU 'O E GAMEPAD TEFITO
// ============================ =
ngaue fakafo'ouGamepad () {
// Ma'u 'a e ngaahi gamepads fehokotaki kotoa pe .
const ngaahi va'inga = folau.ma'u 'a e ngaahi va'inga ();
kapau (!gamepads) foki mai;
// Faka'aonga'i 'a e 'uluaki gamepad fehokotaki .
const gp = ngaahi va'inga [0];
kapau (gp) {
// Fakafo'ou 'a e ngaahi tu'unga 'o e button 'aki hono toggling 'a e kalasi "ngaue"
btnA.kalasiLisi.toggle ("ngaue", gp.ngaahi pātene [0].lomi'i);
btnB.kalasiLisi.toggle ("ngaue", gp.ngaahi pātene [1].lomi'i);
btnX.kalasiLisi.toggle ("ngaue", gp.ngaahi pātene [2].lomi'i);
// To'oto'o 'a e button tu'u (button index 9 'i he lahi taha 'o e ngaahi pule)
const tu'uLomi'i = gp.ngaahi pātene [9].lomi'i;
tu'u1.kalasiLisi.toggle ("ngaue", tu'uLomi'i);
tu'u2.kalasiLisi.toggle ("ngaue", tu'uLomi'i);
// Langa ha lisi 'o e ngaahi button 'oku lolotonga lomi'i ki he faka'ali'ali 'o e tu'unga .
tuku ke lomiʻi = [];
gp.ngaahi pātene.ki heTakitaha ((btn, au) => {
kapau (btn.lomi'i)lomi'i.teke ("Pato " + i);
});
// Fakafo'ou 'a e tohi 'o e tu'unga kapau 'oku lomi'i ha ngaahi button .
kapau (lomi'i.loloa > 0) {
tu'unga.textContent = "Lomi'i: " + lomi'i.kau (", ");
}
}
// Hokohoko atu 'a e loop kapau 'oku lele 'a e debugger .
kapau (lele) {
rafId = koleAnimāFrame (fakafo'ou 'a eGamepad);
}
}
'Oku tanaki atu pe to'o 'e he founga classList.toggle() 'a e kalasi 'oku ngaue 'o makatu'unga 'i he pe 'oku lomi'i 'a e button, 'a ia 'oku ne fakatupu 'etau ngaahi sitaila 'o e layer CSS.
Sitepu 5: Tokanga'i 'a e ngaahi me'a 'oku hoko 'i he Keyboard .
'Oku hanga 'e he kau fanongo ko 'eni 'o e me'a na'e hoko 'o ngaue 'a e fallback 'o e keyboard:
// ============================ =
// NGAAHI TO'O 'O E NGAAHI ME'A 'OKU KEYBOAD
// ============================ =
tohi.tānaki atu ʻa e meʻa naʻe hoko ("keydown", (e) => {
kapau (Mape kī[e.ki]) {
// To'oto'o 'a e ngaahi 'elemeniti 'e taha pe lahi .
kapau (Array.isArray (mape kī [e. kī])) {
keyMap [e.ki].mo e takitaha (el => el.kalasiLisi.tanaki atu ("ngaue"));
} kehe {
keyMap [e.ki].kalasiLisi.tanaki atu ("ngaue");
}
tu'unga.textContent = "Kuo lomi'i 'a e kī: " + e.ki.ki he Mata'itohiLahi ();
}
});
tohi.tānaki atu ʻa e meʻa naʻe hoko ("keyup", (e) => {
kapau (Mape kī[e.ki]) {
// To'o 'a e tu'unga 'oku ngaue 'i he taimi 'oku tukuange ai 'a e kī .
kapau (Array.isArray (mape kī [e. kī])) {
keyMap [e.ki].mo e takitaha (el => el.kalasiLisi.to'o ("ngaue"));
} kehe {
keyMap [e.ki].kalasiLisi.to'o ("ngaue");
}
tu'unga.textContent = "Kuo tukuange 'a e kī: " + e.ki.ki he Mata'itohi Lahi ();
}
});
Sitepu 6: Tānaki atu ʻa e Puleʻi ʻo e Kamata/Taʻofi .
Faka'osi, 'Oku tau fie ma'u ha founga ke toggle 'a e debugger 'i he mo e mate:
// ============================ =
// TOGGLE 'A E DEBUGGER 'I HE/MATE
// ============================ =
tohi.ma'u 'a e 'ElementById ("toggle"). tanaki atu 'a e me'a 'oku hoko ("lomi'i", () => {
lele = !lele; // Flip 'a e tu'unga lele .
kapau (lele) {
tu'unga.textContent = "'Oku lele 'a e debugger ...";
fakafo'ou 'a e va'inga (); // Kamata 'a e loop fakafo'ou .
} kehe {
tu'unga.textKanokato = "'Oku 'ikai ke ngaue 'a e Debugger";
kaniseli 'a e Fakava'e 'o e Faka'ata (rafId); // Ta'ofi 'a e loop .
}
});
Ko ia 'io, lomi'i ha button pea 'oku ulo. Tekeʻi ʻa e vaʻakaú pea ʻoku ngaʻunu. Ko ia ia.
Ko e meʻa ʻe taha: ngaahi mahuʻinga raw. Taimi ʻe niʻihi ʻokú ke fie sio pē ki he ngaahi fiká, ʻo ʻikai ko e ngaahi māmá.
'I he tu'unga ko 'eni, 'Oku totonu ke ke sio:
Ko ha pule faingofua ʻi he screen, .
Ko e ngaahi pātene ‘oku nau tali ‘i ho‘o fetu‘utaki mo kinautolú, pea .
Ko ha lau debug fili 'oku fakahaa'i ai 'a e ngaahi faka'ilonga 'o e button lomi'i.
Ke ‘ai ‘eni ke si’isi’i ange ‘a e abstract, ‘Oku ‘i heni ha faka’ali’ali vave ‘o e pule ‘i he screen ‘oku tali ‘i he taimi mo’oni:
Ko ʻeni, lomiʻi ʻo e Kamata Lekooti ʻoku ne hiki ʻa e meʻa kotoa pē kae ʻoua kuó ke taaʻi ʻa e Taʻofi ʻo e Lekooti.
2. Fakahū atu ʻo e fakamatala ki he CSV/JSON .
Ko ‘etau ma’u pe ha fu’u ‘akau, te tau fie fakahaofi ia.
Sitepu 1: Fa'u 'a e Tokoni Download .
'Uluakí, 'Oku tau fie ma'u ha ngaue tokoni 'oku ne tokanga'i 'a e ngaahi downloads 'o e faile 'i he browser:
// ============================ =
// TOKONI KI HE FAILE DOWNLOAD
// ============================ =
ngaue downloadFile (hingoa 'o e faile, kakano, fa'ahinga = "tohi/ma'ama'a") {
// Fa'u ha blob mei he kakano .
const blob = Blob fo'ou ([kakano], { fa'ahinga });
const url = URL.fakatupu 'a e URL 'o e me'a (blob);
// Fa'u ha fehokotaki'anga download fakataimi pea lomi'i ia .
const ha = tohi.fakatupu'Element ("ha");
a.meʻa = url;
a.hifo = hingoa 'o e faile;
a.lomi'i ();
// Fakama'a 'a e me'a URL hili hono download .
setTaimi (() => URL.fakafoki 'a e URL 'o e me'a (url), 100);
}
'Oku ngaue 'a e ngaue ko 'eni 'aki hono fa'u ha Blob (binary me'a lahi) mei ho'o fakamatala, fakatupu ha URL fakataimi ki ai, pea lomi'i fakapolokalama ha fehokotaki'anga download. ‘Oku fakapapau’i ‘e he fakama’a ‘oku ‘ikai ke tau leak ‘a e manatu.
Sitepu 2: Tokanga'i 'a e JSON Export .
'Oku haohaoa 'a e JSON ki hono tauhi 'o e fokotu'utu'u 'o e fakamatala kakato:
// ============================ =
// TUKU KI TU'A KO E JSON
// ============================ =
tohi.ma'u 'a e 'ElementById ("fakahū ki tu'apule'anga-json").
// Vakai'i pe 'oku 'iai ha me'a ke export
kapau (!ngaahi fakava'e.loloa) {
console.warn("'Oku 'ikai ha lekooti 'oku ma'u ke 'ave ki tu'apule'anga.");
foki mai;
}
// Fa'u ha payload mo e metadata mo e ngaahi fakava'e .
const uta totongi = {
fakatupu 'i he: 'aho fo'ou ().ki he ISOString (),
ngaahi fakatātā
};
// Download 'o hange ko e JSON kuo fakafotunga .
downloadFaile(
"va'inga-toka.json",
JSON.fakafekau'aki (totongi, 'ikai ha me'a, 2),
"tohi kole/json".
);
});
'Oku tauhi 'e he fotunga 'o e JSON 'a e me'a kotoa pe 'oku fokotu'utu'u mo faingofua parseable, 'o 'ai ia ke lelei 'aupito ki hono uta 'o foki ki he ngaahi me'angaue dev pe vahevahe mo e kaungame'a.
Sitepu 3: Tokanga'i 'a e CSV Export .
Ki he ngaahi fakatau atu ki tu'apule'anga 'o e CSV, 'Oku fie ma'u ke tau flatten 'a e fakamatala fakahokohoko ki he ngaahi laine mo e ngaahi kolomu:
//============================
// TUKU KI TU'A KO E CSV
// ============================ =
tohi.ma'u 'a e 'ElementById ("fakatau ki tu'apule'anga-csv").
// Vakai'i pe 'oku 'iai ha me'a ke export
kapau (!ngaahi fakava'e.loloa) {
console.warn("'Oku 'ikai ha lekooti 'oku ma'u ke 'ave ki tu'apule'anga.");
foki mai;
}
// Langa 'a e laine 'o e 'ulu'i CSV (ngaahi kolomu ki he timestamp, ngaahi button kotoa pe, ngaahi toki kotoa pe)
const 'ulu'i tohi = ngaahi fakava'e [0].ngaahi patoni.mape ((_, au) => btn $ {i});
const 'ulu'i tohiAxes = ngaahi fakava'e [0].ngaahi toki.mape ((_, 'oku ou) => 'asi $ {'oku ou});
const 'ulu'i tohi = ["t", ...'ulu'i-Buttons, ...'ulu'i-Axes].kau (",") + "\n";
// Download ko e CSV
downloadFile ("va'inga-log.csv", 'ulu'i tohi + ngaahi laine, "tohi / csv");
});
'Oku ngingila 'a e CSV ki he 'analaiso 'o e fakamatala koe'uhi he 'oku ne fakaava hangatonu 'i he Excel pe Google Sheets, 'o faka'ata koe ke ke fa'u ha ngaahi saati, filter 'a e fakamatala, pe ngaahi sipinga 'o e feitu'u 'i he sio.
Ko ‘eni kuo ‘i ai ‘a e ngaahi button ‘o e export, te ke sio ki ha ongo fili fo’ou ‘i he panel: Export JSON mo e Export CSV. 'Oku malie 'a e JSON kapau 'oku ke fie lī 'a e raw log ki mui ki ho'o ngaahi me'angaue dev pe poke takatakai 'i he fokotu'utu'u. CSV, 'i he tafa'aki 'e taha, 'oku fakaava hangatonu ki he Excel pe Google Sheets koe'uhi ke ke lava 'o saati, filter, pe fakafehoanaki 'a e ngaahi me'a 'oku fakahu. 'Oku fakahaa'i 'e he fakatata ko 'eni 'a e anga 'o e panel mo e ngaahi pule 'oku toe lahi ange ko ia.
3. Sisitemi 'o e Snapshot .
Taimi ‘e ni’ihi ‘oku ‘ikai te ke fiema’u ha lekooti kakato, ko ha “screenshot” vave pe ‘o e ngaahi tu’unga ‘o e input. Ko e feitu’u ia ia ‘oku tokoni ai ha fo’i pātene To’o ‘a e Snapshot.
To'o 'a e 'ata
Pea mo e JavaScript:
// ============================ =
// TO'O 'A E 'ATA
// ============================ =
tohi.getElementById ("faka'ata").tanaki atu 'a e me'a na'e hoko ("lomi'i", () => {
// Ma'u 'a e ngaahi gamepads fehokotaki kotoa pe .
const pads = folau.ma'u 'a e ngaahi pads 'o e va'inga ();
const 'oku ngaue 'a e ngaahiPads = [];
// Loop 'o fakafou 'i he mo puke 'a e tu'unga 'o e gamepad takitaha 'oku fehokotaki .
mo e (gp tu'uma'u 'o e pads) {
kapau (!gp) hoko atu; // Fakalaka 'i he ngaahi slot 'ata'ataa
Pads malohi.teke ({
id: gp.id, // Hingoa 'o e pule/fakatata
timestamp: fakahoko.he taimi ni (),
ngaahi pātene: gp.ngaahi pātene.mape (b => ({
lomiʻi: b.lomiʻi, .
mahu'inga: b.mahu'inga
})),
ngaahi toki: [...ngaahi toki gp].
});
}
// Vakai'i pe na'e ma'u ha ngaahi gamepads .
kapau (!Pads ngaue.loloa) {
console.fakatokanga ("'Oku 'ikai ha ngaahi va'inga 'oku fehokotaki ki he 'ata.");
alert("'Oku 'ikai ke 'ilo'i 'a e pule!");
foki mai;
}
// Log mo fakatokanga'i 'a e tokotaha ngaue .
fakafiemalie.log ("Faka'ata:", Pads 'oku ngaue);
fakatokanga(Na'e to'o 'a e 'ata! Na'e puke $ {activePads.loloa} pule(s).);
});
Snapshots 'oku ne faka'aisi 'a e tu'unga totonu 'o ho'o pule 'i ha momeniti 'e taha 'i he taimi.
4. Toe Fakahu 'a e Laumalie .
Ko 'eni ki he taha malie: replay input laumalie. 'Oku to'o 'e he me'a ni ha fu'u 'akau pea va'inga'i ia 'i he sio 'o hange ko ha tokotaha va'inga phantom na'a ne faka'aonga'i 'a e pule.
Toe fakahoko 'a e Lekooti Fakamuimuitaha
JavaScript ki hono toe fakahoko:
// ============================ =
// TOE VA'INGA 'A E LAUMALIE
// ============================ =
tohi.ma'u 'a e 'ElementById ("toe va'inga").
// Fakapapau'i 'oku tau ma'u ha lekooti ke replay .
kapau (!ngaahi fakava'e.loloa) {
alert("'Oku 'ikai ha lekooti ke toe fakahoko!");
foki mai;
}
console.log ("Kamata 'a e toe va'inga 'a e laumalie ...");
// Muimui'i 'a e taimi ki he va'inga synced .
tuku ke kamataTaimi = fakahoko.he taimi ni ();
tuku ke fakava'eIndex = 0;
// Toe va'inga'i 'a e loop 'o e mo'ui
ngaue sitepu () {
const he taimi ni = fakahoko.he taimi ni ();
const kuo 'osi = ko 'eni - kamataTaimi;
// Ngaue'aki 'a e ngaahi fakava'e kotoa pe na'e totonu ke hoko 'i he taimi ni .
lolotonga (fakava'eIndex < ngaahi fakava'e.loloa && ngaahi fakava'e [fakava'eIndex].t <= kuo 'osi) {
const fakava'e = ngaahi fakava'e [fakava'eIndex];
// Fakafo'ou 'a e UI mo e ngaahi tu'unga 'o e button kuo lekooti .
btnA.kalasiLisi.toggle ("ngaue", fakava'e.ngaahi pātene [0].lomi'i);
btnB.kalasiLisi.toggle ("ngaue", fakava'e.ngaahi pātene [1].lomi'i);
btnX.kalasiLisi.toggle ("ngaue", fakava'e.ngaahi pātene [2].lomi'i);
// Fakafo'ou 'a e faka'ali'ali 'o e tu'unga
tuku ke lomiʻi = [];
fakava'e.ngaahi pātene.ki heTakitaha ((btn, au) => {
kapau (btn.lomi'i) lomi'i.teke ("Pato " + i);
});
kapau (lomi'i.loloa > 0) {
tu'unga.textContent = "Laumalie: " + lomi'i.kau (", ");
}
fakavaʻeIndex ++;
}
// Hokohoko atu 'a e loop kapau 'oku lahi ange 'a e ngaahi fakava'e .
kapau (fakava'eIndex < ngaahi fakava'e.loloa) {
koleAnimāFrame (sitepu);
} kehe {
fakafiemalie.log ("Toe fakahoko'osi.");
tu'unga.textContent = "Toe va'inga kakato";
}
}
// Kamata 'a e replay .
sitepu ();
});
Ke fai 'a e debugging ha ki'i nima-'i he, Na'a ku tanaki atu ha replay 'o e laumalie. Ko e taimi pe ‘oku ke lekooti ai ha fakataha, ‘e lava ke ke taa’i ‘a e replay pea sio ki he UI ‘oku ne fakahoko ia, meimei hange ha tokotaha va’inga phantom ‘oku lele ‘a e pad. 'Oku fakahaa'i mai ha button fo'ou 'o e Replay Ghost 'i he panel ki he me'a ni.
Hit Record, mess takai holo mo e pule 'i ha ki'i, tu'u, pea replay. 'Oku echo pe 'e he UI 'a e me'a kotoa pe na'a ke fai, hange ha laumalie 'oku muimui ki ho'o ngaahi inputs.
Ko e hā ʻoku hohaʻa ai ki he ngaahi meʻa fakalahi ko ʻení?
Ko e lekooti/export 'oku ne 'ai ke faingofua ki he kau sivi ke fakahaa'i tonu 'a e me'a na'e hoko.
Snapshots ‘aisi ha momeniti ‘i he taimi, super ‘aonga ‘i he taimi ‘oku ke tuli ai ‘a e fanga ki’i manupuna kehekehe.
'Oku lelei 'aupito 'a e replay 'o e laumalie ki he ngaahi ako, sivi 'o e accessibility, pe ko hono fakafehoanaki pe 'o e ngaahi setups pule 'i he tafa'aki ki he tafa'aki.
‘I he taimi ko ‘ení, ‘oku ‘ikai ko ha faka‘ali‘ali maau pē ia ‘oku toe, ka ko ha me‘a te ke lava ‘o ‘ai mo‘oni ke ngāue.
Ngaahi Keisi Ngāue‘aki ‘i he Māmani Mo‘oní
Ko ‘eni kuo tau ma’u ‘a e debugger ko ‘eni ‘oku lava ke ne fai ha me’a lahi. 'Oku ne fakahaa'i 'a e input mo'ui, lekooti 'a e ngaahi tohi, exports kinautolu, pea na'a mo e replays 'a e ngaahi me'a. Ka ko e fehuʻi moʻoní: ko hai ʻoku tokanga moʻoní? Ko hai ‘oku ‘aonga ki ai ‘eni?
Kau Fakatupulaki Vaʻinga
Ko e kau pule ko e konga ia 'o e ngaue, ka ko hono debugging kinautolu? Ko e angamahení ko ha mamahi. Fakakaukauloto atu ‘okú ke sivi‘i ha combo va‘inga tau, hangē ko e ↓ → + punch. ʻI he ʻikai ke ke lotú, naʻá ke lomiʻi tuʻo ua ia ʻi he founga tatau, ʻokú ke lekooti tuʻo taha, pea toe tā ia. ʻOsi. Pe 'oku ke fetongi 'a e ngaahi tohi JSON mo ha kaungāngāue ke vakai'i pe 'oku tali tatau ho'o code multiplayer 'i he'enau misini. Ko e fu’u me’a ia.
Kau Ngaue ki he Ma'u'anga Tokoni
Ko e taha ko ‘eni ‘oku ofi ki hoku loto. ʻOku ʻikai ke vaʻinga ʻa e tokotaha kotoa pē ʻaki ha meʻa pule “tuʻunga.” 'Oku lī atu 'e he kau pule fe'unga 'a e ngaahi faka'ilonga ngali kehe 'i he taimi 'e ni'ihi. ‘I he me’angaue ko ‘eni, ‘e lava ke ke sio tonu ki he me’a ‘oku hoko. Kau faiako, kau fakatotolo, ko hai pe. Te nau lava ʻo puke ha ngaahi ʻakau, fakafehoanaki kinautolu, pe toe fakahoko ʻa e ngaahi inputs ʻi he tafaʻaki-ki-he-taha. Fakafokifā pē, kuo hoko ‘o mahino ‘a e ngaahi me‘a ta‘ehāmaí.
Sivi Fakapapau'i 'o e Tu'unga Lelei
ʻOku faʻa tohi ʻe he kau siví ha ngaahi fakamatala hangē ko e “Naʻá ku tuki ha ngaahi pātene heni pea naʻe motu.” ʻIkai fuʻu tokoni. Ko ʻeni? Te nau lava ʻo puke ʻa e ngaahi mīsini lomiʻi totonú, ʻave ki tuʻapuleʻanga ʻa e ʻakaú, pea ʻave ia. ʻIkai ha mateʻi.
Kau faiako
Kapau ‘oku ke fai ‘a e ngaahi ako pe vids ‘i he YouTube, ko e replay ‘a e laumalie ko e koula. Te ke lava ‘o pehē mo’oni, “Ko e me’a ‘eni na’a ku fai mo e pule,” lolotonga ia ‘oku fakahaa’i ‘e he UI ‘oku hoko ia. ‘Oku ‘ai ke mahino ange ‘a e ngaahi fakamatalá.
ʻI he tafaʻaki ʻo e ngaahi vaʻingá
Pea ‘io, ‘oku ‘ikai ko e ngaahi va’inga pe ‘eni. Kuo fakaʻaongaʻi ʻe he kakaí ʻa e ngaahi meʻa pule ki he ngaahi lōpotí, ngaahi poloseki ʻātí, mo e ngaahi fetuʻutakiʻanga ʻo e accessibility. Kaveinga tatau he taimi kotoa pe: ko e ha 'oku sio mo'oni ki ai 'a e browser? ‘I he me’a ni, ‘oku ‘ikai fiema’u ke ke mate’i.
Faka'osi .
Debugging ha input pule kuo ongo ma'u pe hange ko e lele faka'uli. ‘Oku ‘ikai ke hangē ko e DOM pe CSS, ‘oku ‘ikai ha ‘inisipēkita langa-‘i loto ki he gamepads; ko e ngaahi fika raw pe ia ‘i he console, ‘oku faingofua ke mole ‘i he longoa’a.
'I ha ngaahi laine 'e laungeau 'o e HTML, CSS, mo e JavaScript, na'a mau langa ha me'a kehe:
Ko ha debugger faka'ata 'oku ne 'ai ke 'asi 'a e ngaahi inputs ta'e 'asi.
Ko ha sisitemi CSS layered 'oku ne tauhi 'a e UI ke ma'a mo debuggable.
Ko ha seti 'o e ngaahi fakalelei'i (lekooti, 'ave ki tu'apule'anga, snapshots, replay 'o e laumalie) 'oku ne hiki hake ia mei he demo ki he me'angaue developer.
‘Oku fakahaa’i ‘e he poloseki ko ‘eni ‘a e mama’o ‘e lava ke ke ‘alu ki ai ‘aki hono fefiofi ‘a e malohi ‘o e Web Platform mo ha ki’i fa’ufa’u ‘i he CSS Cascade Layers.
Ko e me'angaue na'a ku toki fakamatala'i kakato ko e open-source. Te ke lava 'o clone 'a e repo 'o e GitHub pea 'ahi'ahi'i ia ma'au.
Ka ko e meʻa ʻoku mahuʻinga angé, te ke lava ʻo ngaohi ia ʻe koe. Tānaki atu hoʻo ngaahi laʻipepa pē ʻaʻau. Langa ho'o logic replay. Fakataha'i ia mo ho'o prototype va'inga. Pe na’a mo hono ngāue’aki ia ‘i ha ngaahi founga na’e ‘ikai te u fakakaukau ki ai. Mo e ako'i, accessibility, pe 'analaiso 'o e fakamatala.
‘I he ‘osi ‘a e ‘aho, ‘oku ‘ikai ko e fekau’aki pe ‘eni mo e debugging gamepads. ‘Oku fekau’aki ia mo hono ulo atu ha maama ‘i he ngaahi inputs fufuu, pea ‘oange ki he kau developers ‘a e falala ke nau ngaue mo e hardware ‘oku kei ‘ikai ke ‘uma kakato ‘a e uepi.
Ko ia, plug 'i ho'o pule, fakaava ho'o 'etita, pea kamata ke 'ahi'ahi. Mahalo te ke 'ohovale 'i he me'a 'e lava ke fakahoko mo'oni 'e ho'o browser mo ho'o CSS.