Quick answer: Use event.y directly. macOS natural scroll is intentional. Use event.flipped if you need cross-platform invariance.
Mac user scrolls down; in-app camera zooms out. Windows user same gesture zooms in. macOS natural scroll is inverted at OS level.
The Fix
for event in events:
if event.type == pygame.MOUSEWHEEL:
# Default: respect OS direction
camera_zoom += event.y * 0.1
# Or normalize to consistent direction
normalized = (-1 if event.flipped else 1) * event.y
Default approach respects user setting. Normalized fights OS for app-internal consistency; pick based on UX policy.
Verifying
macOS user with natural scroll: gesture matches expectations. Windows user: matches Windows convention.
“Use event.y. OS handles direction.”
Related Issues
For event loop lag, see event lag. For multiprocessing pickle, see multiprocessing.
event.y. OS direction.