我目前正在尝试使用pygame开发游戏,但我的一些列表存在一些问题。确实很简单,我想在屏幕外删除镜头。我的当前代码可以完美工作,直到我拍摄了不止一个。

当前代码:

#ManageShots
for i in range (len(ShotArray)):
    ShotArray[i].x += 10
    windowSurface.blit(ShotImage, ShotArray[i])
    if(ShotArray[i].x > WINDOWWIDTH):
        ShotArray.pop(i)


错误信息:

ShotArray[i].x += 10
IndexError: list index out of range

最佳答案

从列表中弹出一个项目会将该项目之后的所有内容上移一位。因此,您最终得到的索引i很容易超出范围。

循环后从列表中删除项目,或反过来循环遍历列表:

for shot in reversed(ShotArray):
    shot.x += 10
    windowSurface.blit(ShotImage, shot)
    if shot.x > WINDOWWIDTH:
        ShotArray.remove(shot)

关于python - 循环删除列表项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14651433/

10-10 10:30