Python 使用pygame.transform.rotate()时出现奇怪的移动

Python 使用pygame.transform.rotate()时出现奇怪的移动,python,pygame,Python,Pygame,当我旋转图像时,尽管我正在保存旧的矩形中心并使旋转的矩形中心成为旧的中心,但图像会发生奇怪的移动。我想让它在正方形的中心旋转 下面是它的样子: 您只是计算新的rect错误。试试这个: def rotate(self): #Save the original rect center self.saved_center=self.rect.center #Rotates a saved image every time to maintain quality sel

当我旋转图像时,尽管我正在保存旧的矩形中心并使旋转的矩形中心成为旧的中心,但图像会发生奇怪的移动。我想让它在正方形的中心旋转

下面是它的样子:

您只是计算新的rect错误。试试这个:

def rotate(self):
    #Save the original rect center
    self.saved_center=self.rect.center

    #Rotates a saved image every time to maintain quality
    self.image=pygame.transform.rotate(self.saved_image, self.angle)

    #Make new rect center the old one
    self.rect.center=self.saved_center

    self.angle+=10
它告诉新的矩形以原始中心为中心(中心在这里永远不会改变,只是不断地传递)

问题是self.rect从未正确更新。您只是在更改中心值。整个矩形会随着图像的旋转而改变,因为它的大小会变大或缩小。因此,您需要做的是每次完全设置新的rect

def rotate(self):
    self.image=pygame.transform.rotate(self.saved_image, self.angle)
    self.rect = self.image.get_rect(center=self.rect.center)
    self.angle+=10

这将计算一个全新的rect,同时以给定的中心为基础。在计算位置之前,在矩形上设置中心。因此,你会得到一个以你的点为中心的矩形。

我有这个问题。我的方法有点不同的目的,但我很好地解决了它

self.image.get_rect(center=self.rect.center)

你能发布一个工作示例吗?另外,我之前也回答了一个类似的pygame问题,也提到了在保持旋转中心的同时进行旋转。也许你可以看看它是否有用?main:和module:。我会查看你发布的链接,希望能有所帮助:)太漂亮了:哦!非常感谢。你能解释一下self.image.get_rect(center=self.rect.center)是什么,以及它与self.rect.center的区别吗。我做了一次测试并打印了变量。reg center:(325225)center rect:我不得不说这是我见过的最好的单线解决方案。谢谢你!
import pygame, math

def draw_sprite(self, sprite, x, y, rot):
    #'sprite' is the loaded image file.
    #'x' and 'y' are coordinates.
    #'rot' is rotation in radians.

    #Creates a new 'rotated_sprite' that is a rotated variant of 'sprite'
    #Also performs a radian-to-degrees conversion on 'rot'.
    rotated_sprite = pygame.transform.rotate(sprite, math.degrees(rot))

    #Creates a new 'rect' based on 'rotated_sprite'
    rect = rotated_sprite.get_rect()

    #Blits the rotated_sprite onto the screen with an offset from 'rect'
    self.screen.blit(rotated_sprite, (x-(rect.width/2), y-(rect.height/2)))