Python 如何在同一位置旋转图像?

Python 如何在同一位置旋转图像?,python,pygame,pygame-surface,Python,Pygame,Pygame Surface,我目前正在尝试编写一个游戏,其中包括一个小机器人降落在垫子上。在试图计算出它下落的物理过程中,我遇到了旋转的问题。按左键或右键可沿相应方向旋转 我已经尝试将blit与rect.center一起使用,但它似乎仍然不起作用。任何帮助都将不胜感激 def rotate_right(self): self.new_angle = self.angle + 30 self.rotate_lander() def rotate_lander(self): self.ima

我目前正在尝试编写一个游戏,其中包括一个小机器人降落在垫子上。在试图计算出它下落的物理过程中,我遇到了旋转的问题。按左键或右键可沿相应方向旋转

我已经尝试将blit与rect.center一起使用,但它似乎仍然不起作用。任何帮助都将不胜感激

 def rotate_right(self):
    self.new_angle = self.angle + 30
    self.rotate_lander()   

 def rotate_lander(self):
    self.image = pygame.transform.rotozoom(self.image, self.new_angle, 1)
    self.rect = self.image.get_rect(center=self.image.get_rect().center)
    screen.blit(self.image, self.rect.center)
我已经设法让它旋转,但它会随着每次旋转而移动,我需要它保持在相同的位置。我认为中心已关闭,但我不确定它可能在哪里出错。

首先,在rotate_lander()中,您应该始终旋转原始图片,否则它会失真(在您的情况下,会跑掉)。因此,创建另一个self.image副本,您不会更改它

original = pygame.Surface(...)
...
def rotate_lander(self):
   self.image = pygame.transform.rotozoom(self.original, self.new_angle, 1)
但是现在,图像仍然不会在完全相同的位置上旋转。 问题是,图像的边界框正在改变。这样,图像的每个点的位置都会改变。您不应该将self.rect的位置设置为中心,因为它正在移动。 相反,必须根据边界框的更改更新位置。应该比较旋转前后的边界框。 关于此主题的完整教程已在此处回答:

*如果您只想将图像保留在适当的位置(而不是围绕其中心旋转),您可以去掉中心

首先,在rotate_lander()中,您应该始终旋转原始图片,否则它会失真(在您的情况下,会跑掉)。因此,创建另一个self.image副本,您不会更改它

original = pygame.Surface(...)
...
def rotate_lander(self):
   self.image = pygame.transform.rotozoom(self.original, self.new_angle, 1)
但是现在,图像仍然不会在完全相同的位置上旋转。 问题是,图像的边界框正在改变。这样,图像的每个点的位置都会改变。您不应该将self.rect的位置设置为中心,因为它正在移动。 相反,必须根据边界框的更改更新位置。应该比较旋转前后的边界框。 关于此主题的完整教程已在此处回答:

*如果您只想将图像保留在适当的位置(而不是围绕其中心旋转),您可以去掉中心


你好@ellie,第一个问题很好!欢迎来到Stack Overflow:)Hi@ellie的可能副本,很好的第一个问题!欢迎使用堆栈溢出:)的可能重复项