Python Pygame无法在For循环| | | | Err(Blit的目标无效)中Blit列表中的单个项目

Python Pygame无法在For循环| | | | Err(Blit的目标无效)中Blit列表中的单个项目,python,pygame,Python,Pygame,我正在尝试做一个小游戏,我在返校节的时候遇到了一个问题。真的,我需要做的就是把这个列表放到一张图片上 我的列表由砖块组成 # myList = myCollider(myList, ballRect) for i in range(len(myList)): if(ballRect.colliderect(myList[i])): print("ok") del myList[i] #for i in ran

我正在尝试做一个小游戏,我在返校节的时候遇到了一个问题。真的,我需要做的就是把这个列表放到一张图片上

我的列表由砖块组成

   # myList = myCollider(myList, ballRect)
    for i in range(len(myList)):
        if(ballRect.colliderect(myList[i])):
            print("ok")
            del myList[i]

    #for i in range(0, len(myList)):

     #   screen.blit(brick, myList[i])
    for i in range(len(myList)):
        screen.blit(brick, myList[i])

    screen.blit(platform, platformRectangle)
    screen.blit(ball, ballRect)
此外,在我添加此代码之前,所有代码都有效

del myList[i]
如果我删除它,代码就会工作,并在冲突时激活,就像我想要的那样,但出于某种原因,这似乎不起作用

为什么它不在我的名单上

此外,游戏将一直运行,直到定义的碰撞发生并且del myList[i]被激活

完全错误:

Traceback (most recent call last):
  File "C:\Users\Jackson\source\repos\C200-Breakout-Team26\JackCrap\EXT.py", line 152, in <module>
    Play(400, 400, black, 1)
  File "C:\Users\Jackson\source\repos\C200-Breakout-Team26\JackCrap\EXT.py", line 129, in Play
    if(ballRect.colliderect(myList[i])):
IndexError: list index out of range

若你们想从列表中删除元素,那个么你们应该使用del-myList[i],但当你们在for-loop中使用它时会产生问题,所以最好为你们必须保留的元素创建一个列表

keep = []

for item in myList:
    if ballRect.colliderect(item):
        print("ok")
    else:
        keep.append(item)

myList = keep

for item in myList:
    screen.blit(brick, item)
编辑:使用列表理解删除元素

myList = [item for item in myList if not ballRect.colliderect(item)]
编辑:有关详细信息,请参见文档

若您将元素保留在中,则可以使用来检查球和所有砖块之间的碰撞,并自动移除砖块

但是砖块和球必须是带有self.rect的类


始终将完整的错误消息回溯作为文本,而不是屏幕快照。如果myList[i]是空列表,您希望screen.blitbrick,myList[i]做什么?为什么要添加myList[i]=[]?get_rect返回用于绘制的类rect的实例。现在你试着画screen.blitbrick,[]所以我一直在玩弄一些想法,这是我最后一次尝试。以前,我曾试图删除列表中的spot。我会用删除代码更新它。顺便说一句:在循环中删除会产生问题,因为当您删除元素时,它会将其他元素移动到此位置,但for不知道它,它会跳过一个元素。我添加了与列表理解相同的内容,但它无法打印ok。
pygame.sprite.spritecollide(ball_sprite, block_sprites_group, True)