Atom Engine

System stanu wejścia

Cel

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).


Cykl życia

Tworzenie → Aktualizacja → Zniszczenie

Tworzenie

Aktualizacja

Utrzymanie per klatkę

Zniszczenie


Publiczne API

InputState

type InputState = {
    keys: Set<string>;
    pressed: Set<string>;
    blockedKeys: Set<string>;
};

createInputState(blockedKeys?: string[]): InputState

Tworzy i zwraca nowy obiekt stanu wejścia.


attachInput(state: InputState): void

Rejestruje globalne listenery zdarzeń klawiatury i aktualizuje przekazany stan:


clearPressed(state: InputState): void

Czyści zbiór pressed.


isKeyDown(state: InputState, key: string): boolean

Zwraca, czy klawisz jest aktualnie wciśnięty.


isKeyPressed(state: InputState, key: string): boolean

Zwraca, czy klawisz został naciśnięty jednorazowo od ostatniego wywołania clearPressed().


Wewnętrzne działanie

Model śledzenia klawiszy

System rozróżnia:

Obsługa zdarzeń

Ograniczenia


Przykład

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();

Powiązane elementy