我正在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

我该怎么解决?

最佳答案

这个列表有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))

    # [...]

08-24 22:50