Quick answer: Construct 3 touch IDs being reused for separate fingers on quick taps? Touch.TouchID is OS-assigned; treat IDs as ephemeral and bind by reference, not by index.

Two-finger gesture detection misfires when a single finger taps the screen rapidly - same TouchID assigned to consecutive touches.

Bind to TouchIndex

Use the For each touch construct, reference Touch.TouchIndex for the current iteration. Don't store the ID across frames.

Validate by position

For gestures, check if the ID maps to a position near where you started. If far, it's a different finger - reset state.

Avoid global ID dicts

If you keyed gesture state by TouchID, expect OS-level recycling on iOS. Use Construct's per-touch instance variables instead.

“Touch IDs are not unique forever - just unique per active touch.”

Test on real hardware. The Chrome devtools touch emulator doesn't reuse IDs the way mobile OSes do, hiding this bug in development.