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)