Key down bleibt stecken wenn Shift-Taste #227

Closed
opened 2026-09-24 11:53:12 +02:00 by admin · 1 comment

Beobachtet bei Axis Input: Setze ich zum Taste a (link) und ich schalte die shift taste dazu (a + Shift) und lasse dann die a-taste los, danach die shift taste, dann bewegt sich das objekt weiterhin nach links bis ich einmal kurz die a taste nochmal drücke.

Edit: klar, es wird ein unterschied gemacht zwischen "a" und "A" (große klein), sollte aber egal sein

Beobachtet bei Axis Input: Setze ich zum Taste a (link) und ich schalte die shift taste dazu (a + Shift) und lasse dann die a-taste los, danach die shift taste, dann bewegt sich das objekt weiterhin nach links bis ich einmal kurz die a taste nochmal drücke. Edit: klar, es wird ein unterschied gemacht zwischen "a" und "A" (große klein), sollte aber egal sein
admin added the high-priority label 2026-09-24 11:53:12 +02:00
admin added this to the Development project 2026-09-24 11:53:12 +02:00
admin moved this to Next in Development on 2026-09-24 11:55:39 +02:00
Owner

Behoben in ffb5bbe.

Ursache: Input hat sich Tasten unter KeyboardEvent.key gemerkt. Gedrückt kam a, losgelassen mit gehaltenem Shift kam A. release('A') hat nichts gefunden, also blieb a gedrückt, bis es das nächste Mal ohne Shift losgelassen wurde.

Fix:

  • Neue Regel keyName (src/core/keys.ts): ein einzelnes Zeichen wird kleingeschrieben. a und A sind dieselbe Taste, auch bei Caps Lock.
  • Input merkt sich pro physischer Taste (e.code), unter welchem Namen sie gedrückt wurde, und löst beim Loslassen genau diesen. Damit bleibt auch 1 nicht hängen, wenn es mit Shift als ! losgelassen wird.
  • On key down/up/held, Key is down und Axis input vergleichen mit derselben Regel. Ein Node mit gespeichertem A hört auf a.
  • Beim Aufnehmen einer Taste im Inspector wird Shift+A als a gespeichert.

Grenze: Wer Shift schon vor dem Drücken von 1 hält, sendet !, und ein Node auf 1 reagiert nicht. Stecken bleibt dabei nichts.

Tests: 3 neue Unit-Tests (Ablauf aus dem Issue, 1/!, Node mit A), beide Gegenproben greifen. ./check.sh: 2340 Tests, grün. Wiki Behaviors hat den Punkt „Keys ignore case“.

Behoben in ffb5bbe. **Ursache:** `Input` hat sich Tasten unter `KeyboardEvent.key` gemerkt. Gedrückt kam `a`, losgelassen mit gehaltenem Shift kam `A`. `release('A')` hat nichts gefunden, also blieb `a` gedrückt, bis es das nächste Mal ohne Shift losgelassen wurde. **Fix:** - Neue Regel `keyName` (`src/core/keys.ts`): ein einzelnes Zeichen wird kleingeschrieben. `a` und `A` sind dieselbe Taste, auch bei Caps Lock. - `Input` merkt sich pro physischer Taste (`e.code`), unter welchem Namen sie gedrückt wurde, und löst beim Loslassen genau diesen. Damit bleibt auch `1` nicht hängen, wenn es mit Shift als `!` losgelassen wird. - `On key down/up/held`, `Key is down` und `Axis input` vergleichen mit derselben Regel. Ein Node mit gespeichertem `A` hört auf `a`. - Beim Aufnehmen einer Taste im Inspector wird Shift+A als `a` gespeichert. **Grenze:** Wer Shift schon vor dem Drücken von `1` hält, sendet `!`, und ein Node auf `1` reagiert nicht. Stecken bleibt dabei nichts. **Tests:** 3 neue Unit-Tests (Ablauf aus dem Issue, `1`/`!`, Node mit `A`), beide Gegenproben greifen. `./check.sh`: 2340 Tests, grün. Wiki *Behaviors* hat den Punkt „Keys ignore case“.
admin moved this to Done in Development on 2026-09-24 18:07:06 +02:00
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: meleki/feuerwerk#227