IndexError: list index out of range in Pygame and traceback error

IndexError: list index out of range in Pygame and traceback error

import pygame
pygame.init()

win = pygame.display.set_mode((500, 480))

pygame.display.set_caption("First Game") 

walkRight = [pygame.image.load('R1.png'), pygame.image.load('R2.png'), pygame.image.load('R3.png'), pygame.image.load('R4.png'), pygame.image.load('R5.png'), pygame.image.load('R6.png'), pygame.image.load('R7.png'), pygame.image.load('R8.png'), pygame.image.load('R9.png')]
walkLeft = [pygame.image.load('L1.png'), pygame.image.load('L2.png'), pygame.image.load('L3.png'), pygame.image.load('L4.png'), pygame.image.load('L5.png'), pygame.image.load('L6.png'), pygame.image.load('L7.png'), pygame.image.load('L8.png'), pygame.image.load('L9.png')]
bg = pygame.image.load('bg.jpg')
char = pygame.image.load('standing.png')

clock = pygame.time.Clock()

class player(object):
    def __init__(self,x,y,width,height):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.vel = 5
        self.isJump = False
        self.jumpCount = 10
        self.left = False
        self.right = False
        self.walkCount = 0

    def draw(self, win):
            if self.walkCount + 1 >= 27:
                walkCount = 0

            if self.left:
                win.blit(walkLeft[self.walkCount//3], (round(self.x),round(self.y)))
                self.walkCount += 1
            elif self.right:
                win.blit(walkRight[self.walkCount//3], (round(self.x),round(self.y)))
                self.walkCount += 1
            else:
                win.blit(char, (round(self.x),round(self.y)))




def redrawGameWindow():
    win.blit(bg, (0,0))   
    man.draw(win)
    
    pygame.display.update()

#mainloop
man = player(200, 410, 64, 64)
run = True
while run: 
    clock.tick(27) 

    for event in pygame.event.get(): 
        if event.type == pygame.QUIT:
            run = False
            
    keys = pygame.key.get_pressed()

    if keys[pygame.K_LEFT] and man.x > man.vel: 
        man.x -= man.vel
        man.left = True
        man.right = False
    elif keys[pygame.K_RIGHT] and man.x < 500 - man.width - man.vel: 
        man.x += man.vel
        man.right = True
        man.left = False
    else:
        man.right = False
        man.left = False
        man.walkCount = 0

    if not(man.isJump):
        if keys[pygame.K_SPACE]:
            man.isJump = True
            man.right = False
            man.left = False
            man.walkCount = 0

    else:
        if man.jumpCount >= -10:
            neg = 1
            if man.jumpCount < 0:
                neg = -1
            man.y -= (man.jumpCount ** 2) * 0.5 * neg
            man.jumpCount -= 1
        else:
            man.isJump = False
            man.jumpCount = 10
            
    redrawGameWindow()

pygame.quit() 

错误

Traceback (most recent call last):
  File "C:\Python work\Tech_With_Tim_Pygame_Tutorial\First_Game.py", line 93, in <module>
    redrawGameWindow()
  File "C:\Python work\Tech_With_Tim_Pygame_Tutorial\First_Game.py", line 46, in redrawGameWindow
    man.draw(win)
  File "C:\Python work\Tech_With_Tim_Pygame_Tutorial\First_Game.py", line 36, in draw
    win.blit(walkRight[self.walkCount//3], (round(self.x),round(self.y)))
IndexError: list index out of range

主要问题自参考。您需要更新 self.walkCount = 0.

这段代码对我有用:

def draw(self, win):

        if self.walkCount >= len(walkLeft): # assume left/right same length
            self.walkCount = 0  # use self
            
        print(self.walkCount)

        if self.left:
            win.blit(walkLeft[self.walkCount//3], (round(self.x),round(self.y)))
            self.walkCount += 1
        elif self.right:
            win.blit(walkRight[self.walkCount//3], (round(self.x),round(self.y)))
            self.walkCount += 1
        else:
            win.blit(char, (round(self.x),round(self.y)))