Mouse handling #5
Reference in New Issue
Block a user
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?
If the world is zoomed by the mouse it should rater zoom to the mouse position than the center auf the screen.
If the middle button is pressed i want the map also to drag.
Two quick questions before this is ready:
Implementierung abgeschlossen
Problem & bisherige Schwierigkeiten
Der erste naive Ansatz (
zoom-to-mouseper manueller scrollX/Y-Formel basierend aufptr.worldX/Y) schlug mehrfach fehl. Die Kernfrage war: Wo genau ist Phasers Zoom-Ankerpunkt?Einige fehlgeschlagene Annahmen:
ptr.worldXist zum Zeitpunkt des Wheel-Events aktuell → falsch, der Wert ist veraltetscrollX/scrollY) → falschcenterWorld = scrollX + viewportWidth / (2 * zoom)→ falschLösung: Test-Szenen zur empirischen Analyse
Statt weiter zu raten haben wir eine separate Test-Umgebung gebaut (
/test.html,src/test/), die:game-test.logschreibt (via Vite-Middleware)Befund aus den Logs
scrollX_deltaist bei jedem Zoom-Event 0 — Phaser verändert den Scroll nie. Visuell bleibt aber der Mittelpunkt stabil, was bedeutet: Phaser zoomt vom Screenzentrumm, nicht von der oberen linken Ecke.Die korrekte Weltkoordinate unter einem Screenpunkt ist:
Daraus folgt die Scroll-Korrektur für Zoom-to-Mouse:
Umgesetzte Änderungen
CameraSystem.ts: Zoom-to-Mouse mit obiger Formel,getCenterWorld()korrigiert, JSDoc auf allen Methodensrc/test/: Test-Infrastruktur bleibt bestehen für künftige Kamera-Analysen