如何在Pygame中编程步行周期

时间:2019-04-03 15:05:47

标签: python pygame

我正在Pygame上开发游戏,并希望编写一个步行周期。我该怎么做?

我正在制作这款游戏​​,以解决游戏堵塞的问题,并且我在重复使用所学教程中的一些代码。该代码应该已经进行了必要的调整,但是我的代码无法正常工作。

def draw(self, win):
    pygame.draw.rect(win, (255, 0, 0), [self.x, self.y, self.width, self.height])
    if self.walkCount + 1 >= 20:
        self.walkCount = 0

    walkDown = [pygame.image.load("sprites/MaleMCWalkF0.png"), 
    pygame.image.load("sprites/MaleMCWalkF1.png"), 
    pygame.image.load("sprites/MaleMCWalkF2.png"), 
    pygame.image.load("sprites/MaleMCWalkF3.png")]
    walkRight = []
    walkLeft = []
    walkUp = []
    if not(self.standing):
        if self.left:
            win.blit(walkLeft[self.walkCount//4], (self.x, self.y))
            self.walkCount += 1
        elif self.right:
            win.blit(walkRight[self.walkCount//4], (self.x, self.y))
            self.walkCount += 1
        elif self.down:
            win.blit(walkDown[self.walkCount//4])
    else:
        if self.right:
            win.blit(walkRight[0], (self.x, self.y))
        else:
            win.blit(walkDown[0], (self.x, self.y))

结果应创建一个行走动画,其中每帧持续4帧。但是,该代码返回索引错误:

File "/home/runner/classes.py", line 35, in draw
win.blit(walkRight[self.walkCount//4], (self.x, self.y))
IndexError: list index out of range

我该如何解决?

1 个答案:

答案 0 :(得分:1)

该列表包含4个元素,并且self.walkCount还在不断增加。
您不必计算self.walkCount除以4的商。您不必计算除以4的余数。 使用取模运算符(%)而不是积分除法运算符(//)。参见Binary arithmetic operations

必须是

walkLeft[self.walkCount % 4]

而不是

walkLeft[self.walkCount // 4]


不要连续将图像加载到draw()中。将图像加载到类的构造函数中,并在draw()方法中使用它们:

例如

__init__(self):

    # [...]

    self.walkDown = [pygame.image.load("sprites/MaleMCWalkF0.png"), 
        pygame.image.load("sprites/MaleMCWalkF1.png"), 
        pygame.image.load("sprites/MaleMCWalkF2.png"), 
        pygame.image.load("sprites/MaleMCWalkF3.png")]

def draw(self, win):

    # [...]


    if not(self.standing):
        if self.left:

            win.blit(self.walkLeft[self.walkCount % 4], (self.x, self.y))

    # [...]