2016-11-30 1 views
1

내가하려고하는 것은 rect가 클릭되고 선택되고 텍스트가 표시되지만 다시 클릭하면 de-seleced되고 텍스트가 사라지는 것입니다.파이 게임 - 내 rect가 이미 클릭되었는지 확인하려면 어떻게합니까?

list_of_rect는 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

시도를 구현하는 방법을 잘 모르겠어요 :

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가 목록에 사각형을 저장하는 경우에만 작동합니다. 그는 (잘못된 대명사 인 경우에 유감스럽게도) 저장되는 유일한 정보는 rect_object가 아닌 좌표를 포함하는 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'는 OP 요구 사항에 대해 괜찮은'[[x, y, width, height], [x3, y3, width3, height3]] '처럼 보입니다. – rassar

1

내가 포함하는 2 차원 목록을 사용합니다 부랑자. 사각형을 클릭하면 list[xCoordOfRectangle][yCoordOfRectangle] = !list[xCoordOfRectangle][yCoordOfRectangle]이 표시됩니다. 그런 다음 그리기 방법, 나는 말할 것입니다 : 당신이 list를 초기화 할 필요가

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

참고 모든 구형 거짓 가지고. 또한 직사각형이 직사각형으로 정렬되어 있지 않은 경우 다음과 같은 방법으로 숫자를 사용해야합니다. 1이 할당되고 참; 2가 지정되면 거짓입니다. 3은 할당되지 않았습니다 (일종의 null과 같은). 그 중 하나, 또는 당신은 단지 부울을 저장하고 목록에 어떤 요소가 어떤 요소인지 추적 할 수있는 1 차원 목록을 가질 수 있습니다.