【发布时间】:2014-06-05 08:18:26
【问题描述】:
我正在尝试找到一种方法来检查一个点是否位于 Rect 列表中的任何 Rect 中,并获取列表中该 Rect(或第一个,如果有多个)的索引。
我目前的解决方案是使用我要检查的点制作一个单像素 Rect,然后使用 collidelist 将该点与我要搜索的列表进行比较。
看起来像这样:
tgtrect = pygame.Rect(coords, (1,1)).collidelist(rectlist)
...其中coords 是检查点(通常,不总是,鼠标位置),rectlist 是要评估的矩形列表。
tgtrect 接收碰撞 Rect 的索引号,如果没有,则为 -1。
我需要这个索引值来解析其他地方的碰撞 Rect 的身份。
我觉得有更好的方法来获取此信息(即,根据列表检查 coords,返回索引(如果没有命中,则返回 False/None/-1),而无需创建Rect 每次),但我不知道它是什么(或者它是否存在)。
基本上,我需要的是<Rect>.collidelist(rectlist),但是对于一个 (x,y) 元组而不是一个 Rect,或者<Rect>.collidepoint(coords),但对于一个 Rect 列表而不是一个。 (我可以将第二种方法与 rectlist 的迭代器一起使用,但获取碰撞 Rect 的索引会更加困难。)
我环顾四周,发现了这个, Pygame action when mouse 'click' on .rect?, 它提供了一种检查单个 Rects 的方法,但不是许多列表。意义在于我的目标 Rects 列表是动态的; Rects 的数量和它们的位置经常变化。
我也读过这个, Pygame .Rect won't "collide" with mouse, 由于同样的原因,它给出了一个并不真正适合这种情况的解决方案。
谢谢!
(((Auth. note:这是我的第一个问题,所以如果它有点难看,请原谅我。如果它没有提供足够的信息,请告诉我,或者我可以做些什么来改进它。))
【问题讨论】:
-
请不要使用标题作为问题标签的前缀;使用标记系统。
-
@Burhan Khalid - 我不确定这是否正确。现在我知道了!
-
阅读help section,其中包含information on tagging 以及许多其他好的提示。
-
抛开标签,在这里问这个问题是否与这里的指导方针一致是否合理:stackoverflow.com/help/mcve?我试图将相关代码从更广泛的背景中剔除,以使其更适用于未来的情况,但我不确定我是否在描述它时持续时间过长。尽我所能将其安装到单个屏幕上。这感觉像是成功的,因为我在第一次回复时就得到了我需要的结果,而且几乎是在提出问题后立即得到的。但是,输入仍然很棒。也许以私人信息的形式;我不知道。它只是元相关的。
标签: python-2.7 optimization pygame collision-detection rect