簡體   English   中英

Pygame 獲取列表索引超出范圍時出錯,但我不知道如何修復(我是新手)

[英]Pygame Error getting list index out of range but i dont know how to fix (I'm new)

這顯示了 Traceback(最后一次調用):

 File "C:/Users/PC GAMER/Desktop/pygame sprite/oo.py", line 46, in <module> redrawGameWindow() File "C:/Users/PC GAMER/Desktop/pygame sprite/oo.py", line 35, in redrawGameWindow win.blit(walk_right[walk_Count//3], (x, y)) IndexError: list index out of range

我對 python 和 pygame 非常陌生如果可能的話,知道該怎么做,請解釋如何解決這個問題,謝謝你花時間閱讀,因為我的英語不是很好,謝謝你的時間

import pygame
pygame.init()

Clock = pygame.time.Clock()
win = pygame.display.set_mode((500, 500))
pygame.display.set_caption("Hello")

x = 100
y = 400
width = 64
height = 64
vel = 10

walk_right = [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")]
walk_left = [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")]
bg = pygame.image.load("bg.jpg")
char = pygame.image.load("standing.png")

left = False
right= False
walk_Count = 0
jump_count = 10
jump = False
run = True


def redrawGameWindow():
    global walk_Count

    if walk_Count + 1 >= 27:
        walk_Count = 0
    if left:
        win.blit(walk_left[walk_Count//3], (x, y))
    elif right:
        win.blit(walk_right[walk_Count//3], (x, y))
        walk_Count += 1
    else:
        win.blit(char, (x, y))
    pygame.display.update()
    win.blit(bg, (0, 0))



#Mainloop
while run:
    redrawGameWindow()

    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_RIGHT] and x < 450:
        right = True
        left = False
        x += vel

    elif keys[pygame.K_LEFT] and x > -10:
        x -= vel
        left = True
        right = False
    else:
        right = False
        left = False
        walk_Count = 0
    if not jump:
        if keys[pygame.K_SPACE]:
            left = False
            right = False
            jump = True
    else:
        if jump_count >= -10:
            neg = 1
            if jump_count < 0:
                    neg = -1

            y -= (jump_count ** 2) /2 * neg
            jump_count -= 1

        else:
            jump = False
            jump_count = 10

pygame.quit()

可能是因為 walk_left[] 大小為 8 且 26//3=8。 數組的索引從 0 開始。要解決此問題,請替換 [walk_Count//3]->[walk_Count//3-1]

您可能忘記了列表索引從零開始,而不是從 1。

您的變量walk_Count的最大值可以為 26,如下所示:

if walk_Count + 1 >= 27:
    walk_Count = 0

但如果你看到這些行:

if left:
    win.blit(walk_left[walk_Count//3], (x, y))
elif right:
    win.blit(walk_right[walk_Count//3], (x, y))
    walk_Count += 1

如果walk_Count可以取最大值為 26,則walk_Count//3最大值為 8。如果我們嘗試訪問walk_righ[8]walk_left[8] ,則會出現錯誤,因為這些索引不存在。

為了解決這個問題,您可以更改這部分代碼(將 27 更改為 24):

if walk_Count + 1 >= 24:
    walk_Count = 0

walk_rightwalk_left僅包含 8 張圖像。 因此,當walk_Count + 1大於或等於 24 時,您必須重置walk_Count

def redrawGameWindow():
    global walk_Count

    if walk_Count + 1 >= 24:
        walk_Count = 0 

但是,我建議檢查列表的長度。 測試walk_Count //是否大於或等於列表的長度。 列表的長度可以通過len()獲得:

def redrawGameWindow():
    global walk_Count

    if left:
        if walk_Count // 3 >= len(walk_left):
            walk_Count = 0
        win.blit(walk_left[walk_Count//3], (x, y))
        walk_Count += 1
    
    elif right:
        if walk_Count // 3 >= len(walk_right):
            walk_Count = 0
        win.blit(walk_right[walk_Count//3], (x, y))
        walk_Count += 1
    
    else:
        win.blit(char, (x, y))

或者更一般地說:

def redrawGameWindow():
    global walk_Count

    image_list = [char]
    if left:
        image_list = walk_left
    elif right:
        image_list = walk_right

    if walk_Count // 3 >= len(image_list):
        walk_Count = 0
    
    win.blit(image_list[walk_Count // 3], (x, y))
    walk_Count += 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM