如何测试列表是否与点冲突?

How do I test if list collides with point?

我想测试点“rect.midbottom”和列表“list”是否在 PyGame 中发生碰撞。这是我现在使用的代码:

if pygame.Rect.collidelist(rect.midbottom, list) != -1:
    #yadda_yadda_yadda

终端显示的内容:

TypeError: descriptor 'collidelist' for 'pygame.Rect' objects doesn't apply to a 'tuple' object

我该怎么做才能解决这个问题?

编辑:我指的矩形不存在于列表中,而是作为它自己的对象。

改为使用 collidelistall 函数。它 return 是所有路口的列表。

index = rect.collidelistall(list)
if len(index) > 0:
    #yadda_yadda_yadda

编辑(响应 OP 编辑​​):因为您的矩形是一个对象,所以此代码将 return 一个空列表。相反,您应该使用

index = rect.collidelist(list)

如果发生碰撞,这将 return 列表中矩形碰撞的第一个元素的索引。如果没有发生碰撞,returns -1.

我不熟悉 pygame,但据我所知,您应该使用 Rect 实例中的 collidelist,而不是将实例作为从 class Rect 到方法的参数。另外,您不应该使用“list”作为变量名。

if rect.collidelist(list) != -1:
    #yadda_yadda_yadda

如果你只想检查一个点,你可以创建一个所有角都在 rect.midbottom 的矩形,或者你可以这样做

if any(rect_from_list.collidepoint(rect.midbottom) for rect_fram_list in list):
    #yadda_yadda_yadda