2016-11-30 111 views
1

我想要做的是如果一個矩形被點擊,它被選中並且文本將被顯示,但是如果它再次被點擊,那麼它被取消選擇並且文本消失。Pygame - 如何檢查我的矩形是否已被點擊?

list_of_rect是表示rect的位置和大小的座標列表(x,y,寬度,高度)。

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

嘗試,就像這樣:

rects_clicked = [] 

然後,在你的事件代碼:

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

我用一個名爲selected_rect的變量來代替,並使用了你的想法。完美的作品,謝謝! – Theo

+0

這隻有在@Theo將矩形存儲在列表中時纔有效。他(抱歉,如果錯誤的代詞)已經表示,唯一存儲的信息是list_of_rect,其中包含座標,而不是矩形對象 – PMARINA

+0

@PMARINA假設'list_of_rect'存儲其數據像'[[x,y,width,height], [x2,y2,width2,height2],... [xn,yn,widthn,heightn]] rects_clicked不需要跟蹤矩形對象,而是檢查子列表是否在'rects_clicked'中。所以'rects_clicked'可能看起來像是[[x,y,width,height],[x3,y3,width3,height3]],這對OP的要求很好 – rassar

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有每一個矩形假。另請注意,如果矩形未按矩形排列,則需要按以下方式使用數字:分配1,true; 2被分配,爲false; 3是未分配的(有點像null)。要麼是這樣,要麼你只需要一個一維列表來存儲布爾值,然後跟蹤列表中哪個元素是哪個元素。

相關問題