Quick answer: Pygame sprite collide_rect not matching the visual rotated sprite? rect is axis-aligned; rotation expands the bounds - use a mask or compute the rotated bounding rect.

Spinning saw blade visually overlaps the player but collide_rect returns false.

Use collide_mask

pygame.sprite.collide_mask(s1, s2)

Pixel-perfect collision using the mask. Much more expensive than rect; accurate.

Compute rotated bounds

For mid-precision, compute the bounding rect of the rotated image and use that. Cheaper than mask; tighter than original rect.

Pre-compute mask once

Build the mask in __init__. Per-frame mask creation kills frame rate.

“Rect collision is axis-aligned. Rotated visuals need other primitives.”

For physics-heavy games, build a tier system: rect for broad-phase, mask for narrow-phase. Two orders of magnitude faster than mask-only.