Quick answer: Godot 4 touchscreen producing both ScreenTouch and MouseButton events? Touch-to-mouse emulation is on by default - disable in Project Settings or filter in _input.

Mobile player taps a button; _input fires twice (touch + mouse). Action runs twice.

Disable touch-to-mouse

Project Settings > Input Devices > Pointing > Emulate Mouse From Touch = false. Eliminates the duplicate event.

Or filter in handler

if event is InputEventMouseButton and event.device == -1:
    return  // emulated

Device -1 indicates the emulation; skip those.

Keep mouse-to-touch for desktop testing

Enable Emulate Touch From Mouse for desktop development. Same actions; different source. Touch path tested without a phone.

“Touch emulation is a porting helper. In production, it's a duplicate-event source.”

Pick a strategy per project: touch-only, mouse-only, or both with separate handlers. Mixed emulation is the bug.

Related reading