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.