Pygame:我怎样才能让我的动画更流畅?

时间:2021-07-26 10:27:07

标签: python pygame

我正在用 pygame 制作一个小游戏,你可以上下移动一艘船来避开小行星,并且在每个关卡的末尾都有一个着陆动画。大多数时候动画实际上工作得很好,但有时 180 度旋转会出现问题。虽然船在最后旋转了它回到了它的原始位置(它做了 180 转,着陆,但随后图像又回到了它的原始位置,就像旋转从未发生过一样)。我该如何解决?提前致谢!

它应该如何结束:

animation done right

有时结果如何:

animation gone wrong

着陆是船的精灵内部的一个函数,它也让它靠近行星以便它可以着陆:

def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        #colocamos la imagen
        self.player_img = pygame.image.load(path.join(img_dir, "playerShip1_red.png")).convert() 
        self.imageOriginal = pygame.transform.scale(self.player_img,(38, 50))
        self.imageOriginal.set_colorkey(BLACK)
        self.image = self.imageOriginal.copy()
        #posicion inicial        
        self.rect = self.image.get_rect()
        self.radius = 20
       # pygame.draw.circle(self.image, RED, self.rect.center, self.radius)
        self.rect.top = (HEIGHT // 2) - 20
        self.rect.left = 50
        #incio velocidad a 0
        self.speedY = 0
        self.teclasPulsadas = True
        self.rotacion = 0 
        self.vRotacion = 6.2
        self.last_update = pygame.time.get_ticks()
        self.estado = self.Estado.volando
..............
def aterrizaje(self):
        
        if self.rect.top > 175:
            self.rect.y -=1
        elif self.rect.top < 175:
            self.rect.y +=1
        elif self.rect.bottom > 225:
            self.rect.y -=1
        elif self.rect.bottom < 225:
            self.rect.y += 1
        else:
            pass

        if self.rect.left < 612:
            self.rect.x += 5
        #vuelta 180 grados
            now = pygame.time.get_ticks()   
            if now - self.last_update > 50: 
                self.last_update = now
                self.rotacion = (self.rotacion + self.vRotacion) % 180
                newImage = pygame.transform.rotate(self.imageOriginal, self.rotacion)
                old_center = self.rect.center
                self.image = newImage
                self.rect = self.image.get_rect()
                self.rect.center = old_center
                self.teclasPulsadas = False
            
        else:
            pass

0 个答案:

没有答案