diff --git a/src/systems/CameraSystem.ts b/src/systems/CameraSystem.ts index 3e1d873..ca995ef 100644 --- a/src/systems/CameraSystem.ts +++ b/src/systems/CameraSystem.ts @@ -66,9 +66,11 @@ export class CameraSystem { this.scene.input.on('wheel', (ptr: Phaser.Input.Pointer, _objs: unknown, _dx: number, dy: number) => { const newZoom = Phaser.Math.Clamp(cam.zoom - Math.sign(dy) * ZOOM_STEP, MIN_ZOOM, MAX_ZOOM) if (newZoom === cam.zoom) return + const worldX = ptr.worldX // capture BEFORE zoom changes the value + const worldY = ptr.worldY cam.setZoom(newZoom) - cam.scrollX = ptr.worldX - ptr.x / newZoom - cam.scrollY = ptr.worldY - ptr.y / newZoom + cam.scrollX = worldX - ptr.x / newZoom + cam.scrollY = worldY - ptr.y / newZoom const centerX = cam.scrollX + cam.width / (2 * cam.zoom) const centerY = cam.scrollY + cam.height / (2 * cam.zoom) console.log(`[zoom] ptr=(${ptr.x.toFixed(0)},${ptr.y.toFixed(0)}) world=(${ptr.worldX.toFixed(0)},${ptr.worldY.toFixed(0)}) center=(${centerX.toFixed(0)},${centerY.toFixed(0)}) zoom=${cam.zoom.toFixed(2)}`)