Код ротации выглядит хорошо - но вы знаете, что внутренности Pygame не работают с повернутыми прямоугольниками, не так ли?
Если у вас нет кода, который вы написали сами с новыми углами прямоугольника, то это делается для определения нового прямоугольника со сторонами, параллельными краям поверхности, где оригинальный прямоугольник при повороте может быть вписан прямоугольник того же размера, что и оригинал, под углом наклона. Любая функция Pygame, которой вы передаете объект «self.collideRect» после поворота, просто делает это: обрабатывает прямоугольник как выровненный по поверхности,
как если бы он был создан с углами, которые он имеет сейчас.
Если ваш код требует, чтобы вы проверяли вещи или даже рисовали внутри повернутого прямоугольника, вы должны выполнить все вычисления так, как они были до вращения, и просто выполнить вращение координат во время отображения того, что вы хочу. То есть вы работаете с глобальным преобразованием координат, которое применяется на последнем этапе рендеринга.