slop game oder so
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
/**
|
||||
* Hilfen für Phaser-Tastaturereignisse.
|
||||
* @module systems/keyboard
|
||||
*/
|
||||
|
||||
/**
|
||||
* Lässt jedes KeyboardEvent nur einmal zum Handler durch.
|
||||
*
|
||||
* Warum: Phaser 3.90 verarbeitet bei jedem neuen DOM-Tastaturereignis die gesamte
|
||||
* Warteschlange des aktuellen Frames erneut und leert sie erst am Frame-Ende. Treffen
|
||||
* drei oder mehr Tastenereignisse innerhalb eines Frames ein (schnelles Tippen, oder
|
||||
* die automatische Wiederholung der gehaltenen Q-Taste während einer Befehlseingabe),
|
||||
* meldet Phaser dasselbe `keydown` mehrfach. Für Orbital-Befehle hieße das: Aus
|
||||
* „↓“ wird „↓ ↓“ und die Eingabe schlägt fehl. Das Ereignisobjekt selbst ist dabei
|
||||
* identisch – daran erkennen wir Wiederholungen zuverlässig.
|
||||
*
|
||||
* @template {KeyboardEvent} E
|
||||
* @param {(event: E) => void} handler
|
||||
* @returns {(event: E) => void}
|
||||
*/
|
||||
export function oncePerEvent(handler) {
|
||||
const seen = new WeakSet();
|
||||
return (event) => {
|
||||
if (event && typeof event === 'object') {
|
||||
if (seen.has(event)) return;
|
||||
seen.add(event);
|
||||
}
|
||||
handler(event);
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user