当我击中他的左右箭头时,我有一个想要旋转的精灵,但是当我旋转它时,它会移动一点。我的代码显示在下面
class Ship(pygame.sprite.Sprite):
def __init__(self,color):
super().__init__()
self.image=pygame.image.load("ship.png")
self.colorlayer=pygame.image.load("shipcolor.png")
self.rect = self.image.get_rect()
self.x=400
self.y=300
self.angle_delta = 0
def drawsprite(self,surface):
old_image_center = self.rect.center
new_image = pygame.image.load("ship.png")
new_colorlayer = pygame.image.load("shipcolor.png")
self.image = pygame.transform.rotate(new_image, self.angle_delta)
self.colorlayer = pygame.transform.rotate(new_colorlayer, self.angle_delta)
self.rect = self.image.get_rect()
self.rect.center = old_image_center
surface.blit(self.colorlayer,(self.x, self.y))
surface.blit(self.image,(self.x, self.y))
def rotate(self):
if event.type == pygame.KEYDOWN:
if event.key== pygame.K_RIGHT:
self.angle_delta += 45
if event.key== pygame.K_LEFT:
self.angle_delta -=45
答案 0 :(得分:0)
图像旋转时,其大小会因此而改变。
绕中心点旋转的一种方法是记住旋转之前的中心点,然后在旋转之后重新应用它。
class SomeSprite( pygame.sprite.Sprite ):
def __init__( self, x, y ):
self.original_image = pygame.image.load("some_filename.png").convert_alpha()
self.image = self.original_image
self.rect = self.image.get_rect()
self.rect.center = ( x, y )
def rotateTo( self, angle ):
# rotate and zoom the sprite, starting with an original image
# this prevents image degradation
self.image = pygame.transform.rotozoom( self.original_image, angle, 1 )
# reset it back to original centre
self.rect = self.image.get_rect( center=self.rect.center )
很明显,如果图像主题不在周围的位图中居中,则它肯定会围绕其中心旋转,但看起来仍然不是那样。