Quick answer: Pygame collide_circle assuming rect inscribed circle? Inaccurate for non-square sprites - use collide_mask or implement a custom shape test.

Tall sprite (32x64) collide_circle uses 32-radius; misses upper half of the sprite.

Use collide_mask

Pixel-perfect; respects any shape. More expensive; accurate.

Or compute proper shape

For ellipsoids, custom 2D distance check. Math-based; cheap.

Match sprite to shape

Author tall sprites with circular bounds; or use rect collision for tall.

“Geometry primitives have implicit assumptions. Sprite-shape mismatch surfaces them.”

Pick the right primitive per gameplay need. Mixed primitives in the codebase confuse maintainers; pick deliberately.

Related reading