Eingabe-Eingebungen: Fokus doppelt gebunden ohne Modifikator-Prüfung, gehaltene Zeiger-Eingabe kann hängen bleiben #8
Labels
No labels
accessibility
bug
cleanup
consistency
crash
critical
game-feel
gameplay
high
input
level-generation
low
maintainability
medium
pause
physics
responsive
security
spec-gap
ui
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
gilli/pulse-sprint#8
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Komponente: INPUT, GAME (
boot)Betroffene Version:
main@238ed66,index.htmlZeilen 2101–2131, 2177–2181, 2951–2955Teil 1 –
F/Shiftist doppelt gebunden, ohne Modifikatoren abzutrennenDer Fokus wird an zwei unabhängigen Stellen behandelt:
state.focusEdgeexistiert nur hier und in derDeklaration Zeile 2059 – kein Leser).
ev.repeat-Filter.Folge:
Strg+F/Cmd+F(Browser-Suche),Strg+S,F5-Verwechslungen u. ä. lösentryFocus()aus, solange der Fokus-Balken voll ist – inklusive Fokus-Sound und Bildschirm-Blitz.Der andere Handler verhindert das nicht, weil
preventDefault()nur für diePfeiltasten/
Space-Codes gerufen wird (Zeile 2110).Teil 2 –
pointerleavehinterlässt gesetzte Halte-ZuständeWird der Zeiger nach einem Sprung gehalten, wandert vom Canvas weg und außerhalb losgelassen,
löscht
pointerleave/pointercancelnur den Zeiger-Datensatz.state.jumpHeldbleibttrue, und damit bleibt der Sprunghalte-Auftrieb(
JUMP_HOLD_BOOST,MAX_JUMP_HOLD_TIME) für den nächsten Sprung aktiv, ohne dass derSpieler die Taste hält. Aufgelöst wird es erst durch
clearEdges()beiblur/Pause.Reproduktion
Teil 1: Fokus-Balken voll (
S.focusMeter = 1), dannStrg+Fdrücken → Fokus startet(
S.focusActive === true,AUDIO.focus(), Blitz).Teil 2: Linken Bildschirmbereich gedrückt halten (Sprung mit Halteboost), Zeiger vom Canvas
ziehen, außerhalb loslassen, danach erneut springen → Sprunghöhe entspricht dem Halte- statt dem
Kurzhub.
Lösungsvorschlag
INPUTsetztfocusEdge,playerCmd/updateverbrauchen es – oder der zweite Listener in
boot()entfällt.pointercancel/pointerleavewieupbehandeln (Halte-Zustände zurücksetzen, ohneTap-Aktion auszulösen), z. B. gemeinsame Funktion
endPointer(ev, { fireTap: false }).Strg+Flöst keinen Fokus aus; gehaltener Linksklick + Loslassen außerhalb führt nichtzu einem Boost-Sprung.
Dokumentiert in
gitlab-issues/08-eingabe-fokus-doppelt-und-zeiger-haengt.md(Commit238ed66). Alle Befunde ausgeführt und gemessen; Repro-Schritte im Text.mentioned in issue #9
changed the description
changed the description