与矩形列表的矩形碰​​撞

rect collision with list of rects

我有代码 player_rect.colliderect(tile_rects):,其中 player_rect 是单个 Recttile_rectsRect 的列表。
我收到错误消息`builtins.TypeError:

Argument must be rect style object

当我尝试 运行 我的代码时(大概是因为代码不喜欢在单个矩形上有一个矩形列表)。

我也刚刚发现当我切换 tile_rectsplayer_rect 的位置时我得到了错误

builtins.AttributeError: 'list' object has no attribute 'colliderect'

我的问题是,如何更改我的代码以便检查与矩形和矩形列表的冲突?

您可以使用 for 循环:

for t in tile_rects:
    player_rect.colliderect(t)

如果您想检查是否有任何碰撞,您可以使用:

has_colide = any(player_rect.colliderect(t) for t in tile_rects)

使用 pygame.Rect.collidelist 测试矩形是否与矩形列表中的一个发生碰撞。

collidelist:

Test whether the rectangle collides with any in a sequence of rectangles. The index of the first collision found is returned. If no collisions are found an index of -1 is returned.

if player_rect.collidelist(tile_rects) >= 0:
    # [...]