在保留pygame中心的同时旋转图像

时间:2019-02-27 23:35:56

标签: python-3.x pygame

当我击中他的左右箭头时,我有一个想要旋转的精灵,但是当我旋转它时,它会移动一点。我的代码显示在下面

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

1 个答案:

答案 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 )

很明显,如果图像主题不在周围的位图中居中,则它肯定会围绕其中心旋转,但看起来仍然不是那样。