Во-первых, в rotate_lander () вы всегда должны поворачивать исходное изображение, в противном случае оно будет искажено (и в вашем случае убегайте). Итак, создайте еще одну копию self.image , которую вы не измените.
original = pygame.Surface(...)
...
def rotate_lander(self):
self.image = pygame.transform.rotozoom(self.original, self.new_angle, 1)
Но теперь изображение по-прежнему не будет вращаться в том же положении.
Проблема в том, что ограничивающая рамка image меняется. При этом положение каждой точки image меняется. Вы не должны устанавливать положение self.rect в центре, потому что оно движется.
Вместо этого вы должны обновить позицию в соответствии с изменением ограничительной рамки. Вы должны сравнить ограничивающий прямоугольник до и после поворота.
У вас есть полный учебник по этой теме уже ответил здесь:
Поворот изображения вокруг его центра
* Если вы просто хотите сохранить изображение на месте (не поворачивая его вокруг центра), вы можете просто избавиться от центра .
def rotate_lander(self):
self.image = pygame.transform.rotozoom(self.image, self.new_angle, 1)
self.rect = self.image.get_rect()
screen.blit(self.image, self.rect)