1

現在、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
4

3 に答える 3

5

リストから項目をポップすると、その項目以降のすべてが 1 つ上に移動します。iしたがって、簡単に範囲外のインデックスになってしまいます。

ループの後にリストからアイテムを削除するか、逆にリストをループします。

for shot in reversed(ShotArray):
    shot.x += 10
    windowSurface.blit(ShotImage, shot)
    if shot.x > WINDOWWIDTH:
        ShotArray.remove(shot)
于 2013-02-01T17:08:53.250 に答える
2

問題はlen(SortArray)、ループの開始時に一度評価されることです。ただし、その後、 を呼び出してリストの長さを変更しますShotArray.pop(i)

i = 0
while i < len(ShotArray):
    ShotArray[i].x += 10
    windowSurface.blit(ShotImage, ShotArray[i])
    if(ShotArray[i].x > WINDOWWIDTH):
        ShotArray.pop(i)
    else:
        i += 1
于 2013-02-01T17:08:31.283 に答える