【问题标题】:How can I fix my sprite animation in pygame?如何在 pygame 中修复我的精灵动画?
【发布时间】:2019-08-14 21:24:24
【问题描述】:

我正在为一个学校项目使用 python 3(使用 pygame)编写游戏,但我遇到了一些问题: 我试图让我的精灵在移动时有一个动画,但它只显示一个静态图像: 当我按下左键时,精灵的图像变为静态图像,而不是由 3 个 png 组成的动画。 这是那部分代码:

clock = pygame.time.Clock()

walkRight = [pygame.image.load('ressources/images/R1.png'), pygame.image.load('ressources/images/R2.png'), pygame.image.load('ressources/images/R3.png')]
walkLeft = [pygame.image.load('ressources/images/L1.png'), pygame.image.load('ressources/images/L2.png'), pygame.image.load('ressources/images/L3.png')]
walkUp = [pygame.image.load('ressources/images/U1.png'), pygame.image.load('ressources/images/U2.png'), pygame.image.load('ressources/images/U3.png')]
walkDown = [pygame.image.load('ressources/images/D1.png'), pygame.image.load('ressources/images/D2.png'), pygame.image.load('ressources/images/D3.png')]


#this is the player sprite

class Player(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = (walkDown[4//3])
        self.rect = self.image.get_rect()
        self.rect.centerx = width / 2
        self.rect.bottom = height / 2
        self.speedx = 0
        self.speedy = 0
        self.velocity = 2


    def update(self):
        self.speedx = 0
        self.speedy = 0
        left = False
        right = False
        up = False
        down = False
        run = False  
        walkCount = 4
        runCount = 4   
        clock.tick(FPS)
        keys = pygame.key.get_pressed()

#I believe this is the part that has something wrong!
        if walkCount + 1 >= 9:
            walkCount = 0
        if (down == True and run == False):
            walkCount += 1
            self.image = (walkDown[walkCount//3])     
        elif (up == True and run == False):
            walkCount += 1
            self.image = (walkUp[walkCount//3])
        elif (right == True and run == False):
            walkCount += 1
            self.image = (walkRight[walkCount//3])
        elif (left == True and run == False):
            walkCount += 1
            self.image = (walkLeft[walkCount//3])

【问题讨论】:

    标签: python pygame sprite


    【解决方案1】:

    walkCount 是方法update 中的局部变量。每次调用update 时,它由4 初始化。所以walkCount 的值在函数开始时每次都是一样的。这会导致图像看起来是静态的。
    walkCount 必须是 Player 类的属性,而不是局部变量:

    class Player(pygame.sprite.Sprite):
        def __init__(self):
            pygame.sprite.Sprite.__init__(self)
            self.image = (walkDown[4//3])
            self.rect = self.image.get_rect()
            self.rect.centerx = width / 2
            self.rect.bottom = height / 2
            self.speedx = 0
            self.speedy = 0
            self.velocity = 2
    
            self.walkCount = 4 # <---- add attribute
    
        def update(self):
    
            # [...]
    
            # walkCount = 4  <------ delete local variable
    
            keys = pygame.key.get_pressed()
            down = keys[pygame.K_DOWN]
            up = keys[pygame.K_UP]
            right = keys[pygame.K_RIGHT]
            left = keys[pygame.K_LEFT]
            run = False
    
            if self.walkCount + 1 >= 9:
                self.walkCount = 0
            if (down == True and run == False):
                self.walkCount += 1
                self.image = (walkDown[self.walkCount//3])     
            elif (up == True and run == False):
                self.walkCount += 1
                self.image = (walkUp[self.walkCount//3])
            elif (right == True and run == False):
                self.walkCount += 1
                self.image = (walkRight[self.walkCount//3])
            elif (left == True and run == False):
                self.walkCount += 1
                self.image = (walkLeft[self.walkCount//3])  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-21
      • 2017-06-21
      • 2022-06-13
      • 1970-01-01
      • 2018-08-20
      • 1970-01-01
      • 2019-08-07
      相关资源
      最近更新 更多