【问题标题】:List index is out of range and I do not understand why?列表索引超出范围,我不明白为什么?
【发布时间】:2017-11-11 15:43:03
【问题描述】:

我收到了错误:

line 102, in <module> shot[2] += shoty IndexError: list index out of range

在我的代码中,我尝试编写要抛出的匕首,如果超出范围则将其删除。但是,我了解列表错误的含义;我不确定它对我的代码有何影响,我们将不胜感激!

这是我的代码中与问题相关的部分:

daggers = []
daggerPlayer = pygame.image.load(daggerImage.png)

    for shot in daggers:
    index = 0
    shotx = math.cos(shot[0])*10
    shoty = math.sin(shot[0])*10
    shot[1] += shotx
    shot[2] += shoty
    if (shot[1] < -64) or (shot[1] > 900) or (shot[2] < -64) or (shot[2]> 600):
        daggers.pop(index)
    index +=1

    for shoot in daggers:
        daggerOne = pygame.transform.rotate(daggerPlayer, 360 - shoot[0]*57.29)
        screen.blit(daggerOne, (shoot[1], shoot[2]))

编辑:这是我的全部代码

#Load Images
peterPlayer = pygame.image.load('pixelPirateOne.png)'
nightBackground = pygame.image.load ('NightSky.png')
daggerPlayer = pygame.image.load('daggerImage.png')

#Settting Variables for Moving Character
xPlayer = 200
yPlayer = 275
dxPlayer = 0
dyPlayer = 0
playerPosition = (200,275)
accuracyShot = [0,0]
daggers = []

def quitGame():
    pygame.quit()
    sys.exit()

go = True
while go:

#Blit The Background    
    screen.blit(nightBackground, (0,0))

#Learned about atan2 from --> https://docs.python.org/2/library/math.html
#Allows To Rotate Player With Mouse    
    mousePosition = pygame.mouse.get_pos()   
    angle = math.atan2(mousePosition[1]-(yPlayer+32),mousePosition[0]-(xPlayer+26))
    playerRotate = pygame.transform.rotate(peterPlayer, 360-angle*57.29)
    playerPositionNew = (xPlayer-playerRotate.get_rect().width/2, yPlayer-playerRotate.get_rect().height/2)
    screen.blit(playerRotate, playerPositionNew)
    pygame.display.update()

#Quit Game
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
                quitGame()

#Move Player- Note: Make this portion fluid; it's choppy as of now                
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                dxPlayer -= 15
            elif event.key == pygame.K_RIGHT:
                dxPlayer += 15
            elif event.key == pygame.K_UP:
                dyPlayer -= 15
            elif event.key == pygame.K_DOWN:
                dyPlayer += 15

        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                dxPlayer = 0
            elif event.key == pygame.K_UP or event.key == pygame.K_DOWN:
                dyPlayer = 0

        xPlayer = xPlayer + dxPlayer
        yPlayer = yPlayer + dyPlayer
        pygame.display.update()

        if event.type == pygame.MOUSEBUTTONDOWN:
            mousePosition = pygame.mouse.get_pos()   
            accuracyShot[1] += 1
            daggers.append([math.atan2(mousePosition[1]-(playerPositionNew[1]+32), mousePosition[0]-(playerPositionNew[0]+26)), playerPositionNew[1]+32]) 

#Learned about cos and sin in python from --> https://docs.python.org/2/library/math.html
#Learned about .pop from --> https://docs.python.org/2/tutorial/datastructures.html
    for shot in daggers:
        index = 0
        shotx = math.cos(shot[0])*10
        shoty = math.sin(shot[0])*10
        shot[1] += shotx
        shot[2] += shoty
        if (shot[1] < -64) or (shot[1] > 900) or (shot[2] < -64) or (shot[2]> 600):
            daggers.pop(index)
        index +=1

        for shoot in daggers:
            daggerOne = pygame.transform.rotate(daggerPlayer, 360 - shoot[0]*57.29)
            screen.blit(daggerOne, (shoot[1], shoot[2]))

【问题讨论】:

  • 能否也添加daggers的示例值?
  • 对不起;我不太明白?你的意思是匕首在代码中的附加位置?
  • 除了初始化屏幕和导入之外,我已经添加了全部代码。希望现在更清楚了!
  • 我确实尝试过,但是当我将其更改为 0 和 1 时;我不再收到错误,但是图像甚至没有显示在屏幕上

标签: python list python-3.x error-handling pygame


【解决方案1】:

您附加到 daggers 的列表只有两个元素,但是通过调用 shot[2] 您正在尝试访问第三个元素,这就是您收到该错误的原因。这两个元素应该是shot[0]和shot[1]。我相信你在screen.blit(daggerOne, (shoot[1], shoot[2])) 也犯了同样的错误。

【讨论】:

    猜你喜欢
    • 2018-06-24
    • 2016-10-20
    • 1970-01-01
    • 2020-09-02
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多