Ten moduł zapewnia lekki system śledzenia wejścia z klawiatury dla aplikacji webowych (zwykle gier lub interaktywnych symulacji). Utrzymuje stan w czasie rzeczywistym dla aktualnie przytrzymywanych klawiszy, nowo naciśniętych klawiszy (na klatkę) oraz opcjonalnie blokuje domyślne zachowanie przeglądarki dla określonych klawiszy.
Został zaprojektowany, aby wspierać zarówno wejście ciągłe (np. ruch podczas przytrzymania klawisza), jak i zdarzenia wejścia dyskretnego (np. pojedyncze akcje naciśnięcia).
Tworzenie → Aktualizacja → Zniszczenie
Tworzenie
createInputState() inicjalizuje obiekt stanu wejścia z pustymi zbiorami śledzenia oraz opcjonalnymi zablokowanymi klawiszami.Aktualizacja
attachInput() rejestruje globalne listenery keydown i keyup na window.Utrzymanie per klatkę
clearPressed() jest zazwyczaj wywoływane raz na cykl aktualizacji/klatki, aby zresetować stan „właśnie naciśnięte”.Zniszczenie
InputStatetype InputState = {
keys: Set<string>;
pressed: Set<string>;
blockedKeys: Set<string>;
};
keys: Wszystkie aktualnie przytrzymywane klawisze.pressed: Klawisze, które zostały naciśnięte jednorazowo (bez powtórzeń) od ostatniego resetu.blockedKeys: Klawisze, których domyślne zachowanie przeglądarki powinno być blokowane.createInputState(blockedKeys?: string[]): InputStateTworzy i zwraca nowy obiekt stanu wejścia.
blockedKeys (opcjonalne): Lista wartości klawiszy, których domyślne zachowanie przeglądarki powinno być blokowane.Domyślnie blokowane klawisze:
ArrowUp, ArrowDown, ArrowLeft, ArrowRight)" ")"e"attachInput(state: InputState): voidRejestruje globalne listenery zdarzeń klawiatury i aktualizuje przekazany stan:
Przy keydown:
keyspressed tylko jeśli nie jest to zdarzenie auto-powtarzaneblockedKeysPrzy keyup:
keysblockedKeysclearPressed(state: InputState): voidCzyści zbiór pressed.
pressed odzwierciedla tylko klawisze wywołane od ostatniego cyklu aktualizacji.isKeyDown(state: InputState, key: string): booleanZwraca, czy klawisz jest aktualnie wciśnięty.
state.keys.isKeyPressed(state: InputState, key: string): booleanZwraca, czy klawisz został naciśnięty jednorazowo od ostatniego wywołania clearPressed().
state.pressed.System rozróżnia:
Stan ciągły (keys)
keydown, jak i keyupStan wyzwalany zboczem (pressed)
keydown (e.repeat === false)window.addEventListener dla zdarzeń klawiatury.KeyboardEvent.key przeglądarki.Zapobiega domyślnemu zachowaniu przeglądarki dla klawiszy w blockedKeys, co jest przydatne do:
blockedKeys.const input = createInputState();
// Attach global listeners
attachInput(input);
// Game loop
function update() {
if (isKeyDown(input, "ArrowRight")) {
console.log("Moving right continuously");
}
if (isKeyPressed(input, " ")) {
console.log("Jump triggered once");
}
// Reset per-frame pressed state
clearPressed(input);
requestAnimationFrame(update);
}
update();
KeyboardEvent (Web API)