2016-11-30 4 views
1

То, что я пытаюсь сделать, - это щелкнуть прямоугольник, выбрать его и отобразить текст, но если его снова щелкнуть, он будет удален и текст исчезнет.Pygame - Как проверить, был ли мой прямоугольник уже нажат?

list_of_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) 

EDIT: Одна из идей я думал были следить за прямоугольник, который был щелкнули. Но я не уверен, как реализовать эту

ответ

2

Try имея список, как это:

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 не присвоен (вроде нулевого). Либо это, либо вы можете просто иметь одномерный список для хранения логических элементов, а затем отслеживать, какой элемент в списке является элементом.