[英]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_right
和walk_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.