Ungefangener TypeError body.hook.x, wenn Greifen und Landung im selben Simulationsschritt erfolgen #3
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#3
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: GAME (
simStep)Betroffene Version:
main@238ed66,index.htmlZeile 2444Beschreibung
Hängt sich die Figur an einen Haken und landet noch im selben Simulationsschritt auf festem
Boden (oder das Seil wird im selben Schritt schlaff), stürzt die Spielschleife mit einer
Uncaught Exception ab:
Ursache
CORE.stepBody()führt Greifen und die nachgelagerte Pendelintegration in einem Aufruf aus:integrateHang()setztb.hook = nullin zwei Zweigen, währendev.grabbedbereitstrueist:Der Spiel-Handler verlässt sich darauf, dass
body.hookbeiev.grabbedgesetzt ist:Reproduktion
Geometrie entsteht direkt aus der Generierung: Hakenhöhen
baseY - 248 … -300(
buildPattern, Zeile 939) undxauf[e0 + 60, g1 - 26]geklemmt (Zeile 941).Greift die Figur im Sprung knapp vor der Landekante, beträgt der Hakenabstand ≈ 220 px
(
GRAB_RADIUS= 225), der Pendel-Body wird aufh.y + ropeLengesnappt und immediately dieassistierte Landung ausgelöst.
Node (CORE isoliert)
Ausgabe:
Browser (Playwright, reale rAF-Schleife)
Welt mit Hakengrube aufgebaut,
PULSE.press('grab')und die nächste echte Animationsschleifeverarbeitet den Schritt:
Auswirkung
Fragmentaufnahme, der Gruben-Statistik, der Kamerabewegung,
generateAhead(),pruneWorld()und der HUD-Aktualisierung – all das entfällt für diesen Frame
(im Messlauf: HUD-Strecke blieb unverändert).
S.swingPendingbleibttrue. Die nächste beliebigeLandung zählt als abgeschlossener Schwung (
+40Punkte,+12 %Fokus, Zeile 2465–2469).Leertastein der Luft,E/K, Linksklick, Autogriff).Lösungsvorschlag
Lokale Referenz vor dem Nullen ziehen und den Handler absichern:
Sauberer: in
CORE.attachHook()die Ankerposition ins Event legen(
ev.grabPos = { x: h.x, y: h.y }) und inintegrateHang()bei assistierter Landungev.grabbedzurücknehmen bzw.ev.swingCancelled = truesetzen, damitswingPendingnichtstehen bleibt. Dazu ein Regressionstest: „Greifen direkt an der Landekante → kein Fehler,
swingszählt genau 0 oder 1“.Dokumentiert in
gitlab-issues/03-greifen-landung-gleicher-schritt-crash.md(Commit238ed66). Alle Befunde ausgeführt und gemessen; Repro-Schritte im Text.mentioned in issue #12
changed the description
changed the description