在 pygame 上旋转精灵

Rotating a sprite on pygame

我已经为僵尸创建了一个 class 我 blit 到屏幕上,但是旋转根本不起作用,它旋转了很多并且移动了图像,有什么方法可以旋转图像围绕它的中心?我怎样才能更改旋转 def 以使其正常工作?

class zombieObj:
    def __init__(self, x, y, vel, angle):
      tempZombie = pygame.image.load('zombieSprite.png')
      self.zombieSpriteSurface = pygame.transform.scale(tempZombie, (64, 64))
      self.x = x
      self.y = y
      self.vel = 1
      self.angle = angle
    def rotate(self, image, angle):
      self.zombieSpriteSurface = pygame.transform.rotate(image, angle)

这就是我在循环中调用它的方式:

zombieSprite.angle = zombieSprite.angle + 5
zombieSprite.rotate(zombieSprite.zombieSpriteSurface, zombieSprite.angle)

参见How do I rotate an image around its center using PyGame?。诀窍是在旋转之前获取图像的中心并在旋转之后设置它。另外,您需要旋转原始图像以避免失真:

class ZombieObj:
    def __init__(self, x, y, vel, angle):
        tempZombie = pygame.image.load('zombieSprite.png')
        self.originalImage = pygame.transform.scale(tempZombie, (64, 64))
        self.vel = 1
        self.angle = 0
        self.rect = self.originalImage.get_rect(topleft = (x, y))
        self.roatate(angle)

    def rotate(self, angle):
        self.angle = angle
        self.zombieSpriteSurface = pygame.transform.rotate(self.originalImage, self.angle)
        self.rect = self.zombieSpriteSurface.get_rect(center = self.rect.center)

如果想增加旋转一定的角度,需要在当前角度上加上额外的角度:

class ZombieObj:
    # [...]

    def rotate(self, deltaAngle):
        self.angle += deltaAngle
        self.zombieSpriteSurface = pygame.transform.rotate(self.originalImage, self.angle)
        self.rect = self.zombieSpriteSurface.get_rect(center = self.rect.center)