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

2024-04-16 14:09:45 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我的列表由砖头。直走()

   # 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

Tags: 代码in列表forlenifrangescreen
1条回答
网友
1楼 · 发布于 2024-04-16 14:09:45

如果您想从列表中删除元素,那么您应该使用del myList[i],但是在for循环中使用它会产生问题,所以最好为您必须保留的元素创建列表。你知道吗

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)]

编辑:见文档Sprite

如果将元素保留在pygame.sprite.Group()中,那么可以使用pygame.sprite.spritecollide检查球和所有砖块之间的碰撞,并自动移除砖块。你知道吗

但是bricksball必须是具有self.rect的类

pygame.sprite.spritecollide(ball_sprite, block_sprites_group, True)

相关问题 更多 >