Pygame - 如何检查我的rect是否已被点击?

时间:2016-11-30 23:59:32

标签: python user-interface pygame rectangles

我想要做的是,如果单击了一个矩形,它会被选中并显示文本,但如果再次单击它,则会取消选择它并且文本消失。

list_of_rect是一个坐标列表(x,y,width,height),表示矩形的位置和大小。

render_display只显示带有文字的屏幕。

if event.type == pygame.MOUSEBUTTONUP and event.button == 1:
    x, y = event.pos
    for i in range(len(list_of_rect)):
        j = list_of_rect[i]
        if j[0][0] <= x <= (j[0][0] + j[0][2]) and j[0][1] <= y <= \
                (j[0][1] + j[0][3]):
                render_display(screen, text)

编辑:我想的一个想法就是跟踪点击的矩形。但我不确定如何实现这个

2 个答案:

答案 0 :(得分:2)

尝试列出一个列表,如下所示:

rects_clicked = []

然后,在您的活动代码中:

if j not in rects_clicked:
    #undisplay text
    rects_clicked.append(j)
else:
    #display text
    rects_clicked.remove(j)

答案 1 :(得分:1)

我会使用包含布尔值的2d列表。单击矩形时,我会说list[xCoordOfRectangle][yCoordOfRectangle] = !list[xCoordOfRectangle][yCoordOfRectangle]。然后,在绘图方法中,我会说:

for i in list:
    for j in i: 
        if(j): 
            #information drawing function goes here
        else:
            #Solid/Empty Rectangle drawing function goes here

请注意,您需要初始化list以使每个矩形都为false。另请注意,如果矩形没有以矩形方式排列,则需要按以下方式使用数字:1分配,true;分配2,假; 3是未分配的(有点像null)。或者,或者你可以只有一维列表来存储布尔值,然后跟踪列表中的哪个元素是哪个元素。