【发布时间】:2020-10-01 14:15:59
【问题描述】:
我在屏幕上随机显示 25 个矩形(My_rect 的对象)。
rects = []
for i in range(25):
rects.insert(0, My_rect(canvas))
我的目标是在我点击它们时删除它们。
这就是我处理点击的方式:
if ev.type == pygame.MOUSEBUTTONUP and ev.button == 1:
click_x, click_y = ev.pos
for cur_rect in rects:
if cur_rect.contains_point(click_x, click_y):
rects.remove(cur_rect)
break
contains_point 函数定义如下:
def contains_point(self, point_x, point_y):
rect = Rect(self.x, self.y, self.width, self.width)
return rect.collidepoint(point_x, point_y)
当我单击一个单独定位的矩形时,它应该会被删除。但是,当我单击与其下方的另一个重叠的矩形时,最底部的矩形消失了,这与我的目标相反。 对我来说,最奇怪的是我专门使用 insert(0, ...) 将矩形添加到 rects 而不是 append() 以防止这种效果。
我没有考虑到什么?
【问题讨论】:
-
你的矩形不是按照列表的顺序绘制的吗(所以,第一个在底部)?
-
他们不应该。据我了解插入(0,...),它将较新的对象放在开头,而较旧的对象在列表中向上。然后,当我绘制对象时,我使用 [for cur_rect in rects:] 从头到尾,所以从新到旧。理论上,至少。