Это происходит потому, что вы бьете self.image
в позиции [100, 100]
вместо self.rect
(что означает координаты self.rect.topleft
).Размер изображения после каждого поворота будет разным, и если вы просто перетянете его с теми же верхними левыми координатами, изображение будет колебаться так, потому что центр находится где-то еще в каждом кадре.Вы можете увидеть это, нарисовав ограничивающий прямоугольник на [100, 100]
:
pygame.draw.rect(screen, (255, 0, 0), [(100, 100), self.image.get_size()], 1)
. Чтобы решить эту проблему, вы должны каждый раз создавать новый прямоугольник и устанавливать его center
координаты равными center
координатампредыдущего прямоугольника.Это также отрегулирует topleft
координаты (где изображение будет перетекать), чтобы изображение оставалось по центру.Затем просто перетащите изображение в прямоугольник:
screen.blit(self.image, self.rect)
Нарисуйте self.rect
, чтобы увидеть, как координата topleft
все время меняется, тогда как центр не будет двигаться:
pygame.draw.rect(screen, (255, 0, 0), self.rect, 1)