与矩形列表的矩形碰撞
rect collision with list of rects
我有代码 player_rect.colliderect(tile_rects):
,其中 player_rect
是单个 Rect
,tile_rects
是 Rect
的列表。
我收到错误消息`builtins.TypeError:
Argument must be rect style object
当我尝试 运行 我的代码时(大概是因为代码不喜欢在单个矩形上有一个矩形列表)。
我也刚刚发现当我切换 tile_rects
和 player_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
测试矩形是否与矩形列表中的一个发生碰撞。
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:
# [...]
我有代码 player_rect.colliderect(tile_rects):
,其中 player_rect
是单个 Rect
,tile_rects
是 Rect
的列表。
我收到错误消息`builtins.TypeError:
Argument must be rect style object
当我尝试 运行 我的代码时(大概是因为代码不喜欢在单个矩形上有一个矩形列表)。
我也刚刚发现当我切换 tile_rects
和 player_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
测试矩形是否与矩形列表中的一个发生碰撞。
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:
# [...]