2017-11-20 4 views
0

Pygame의 다른 사각형 단추를 마우스로 클릭하여 x-y 위치를 가져 와서 if 문을 변수로 사용할 수 있습니까?Pygame에 Mousebutton 이벤트 저장

for event in pygame.event.get(): 
    if event.type == pygame.QUIT: 
     sys.exit() 
    elif event.type == pygame.MOUSEBUTTONDOWN: 
     mouse_x, mouse_y = pygame.mouse.get_pos() 
    . 
    . 
    . 


if button_cliked_one and button_cliked_two: 
    print ('buttons clicked') 

else: 
    print('something is wrong') 
+0

예 (내가하는 말만 이해하면) 할 수 있습니다. 너 뭐하려고 했니? 어떤 오류가 있었습니까? – furas

+0

BTW : 이벤트 'MOUSEBUTTONDOWN'이 있다면'event.pos'에서 마우스 위치를 얻을 수 있습니다 – furas

+0

마우스 버튼을 한 번만 마우스로 만들 수 있습니다. 이게 어떻게 가능합니까? –

답변

1

원하는 것을 이해하는 것은 어렵지만 직사각형을 그리려면 이전 마우스 클릭 위치를 저장하고 싶습니까?

당신이해야 할 일은 다른 변수에 저장하는 것뿐입니다. 한 번에 두 번 클릭 위치 만 원한다면 그 위치를 사용하십시오. 또는 파이썬 목록을 사용하여 임의의 수의 클릭 위치를 저장할 수 있습니다.

import pygame, sys 

SIZE = 640, 480 
screen = pygame.display.set_mode(SIZE) 

# empty list 
all_clicks = [] 

drawn = True 
while True: 

    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      pygame.quit() 
      sys.exit() 
     elif event.type == pygame.MOUSEBUTTONDOWN: 
      # store mouse click position in the list: 
      all_clicks.append(event.pos) 
      # event.pos already has the info you'd get by calling pygame.mouse.get_pos() 
      drawn = False 
      print(all_clicks) 

    # at every second click: 
    if not len(all_clicks) % 2 and not drawn: 
     # draw a rectangle having the click positions as coordinates: 
     # pick the minimal x coordinate of both clicks as left position for rect: 
     x = min(all_clicks[-1][0], all_clicks[-2][0]) 
     # ditto for top positionn 
     y = min(all_clicks[-1][1], all_clicks[-2][1]) 
     # and calculate width and height in the same way 
     w = max(all_clicks[-1][0], all_clicks[-2][0]) - x 
     h = max(all_clicks[-1][1], all_clicks[-2][1]) - y 
     pygame.draw.rect(screen, (255, 255, 255), (x, y, w, h)) 
     drawn = True 

    # update screen: 
    pygame.display.flip() 
    # pause a while (30ms) least our game use 100% cpu for nothing: 
    pygame.time.wait(30) 
0

당신은 변수를 사용할 수 있습니다 previous_buttoncurrent_button는 마지막 두 버튼을 remeber 수 있습니다. 그리고 그들이 맞는지 확인할 수 있습니다.

@jsbueno 솔루션과 비슷하지만 목록이 아닌 두 개의 변수를 사용합니다. 더 긴 조합을 확인하려면 list를 사용할 수 있습니다.

import pygame 

# --- functions --- 

def check_which_button_was_click(buttons, pos): 

    for name, (rect, color) in buttons.items(): 
     if rect.collidepoint(pos): 
      return name 

# --- main --- 

# - init - 

screen = pygame.display.set_mode((350, 150)) 

# - objects - 

buttons = { 
    'RED': (pygame.Rect(50, 50, 50, 50), (255, 0, 0)), 
    'GREEN': (pygame.Rect(150, 50, 50, 50), (0, 255, 0)), 
    'BLUE': (pygame.Rect(250, 50, 50, 50), (0, 0, 255)), 
} 

previous_button = None 
current_button = None 

# - mainloop - 

clock = pygame.time.Clock() 
running = True 

while running: 

    # - event - 

    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      running = False 
     elif event.type == pygame.MOUSEBUTTONDOWN: 
      clicked_button = check_which_button_was_click(buttons, event.pos) 
      if clicked_button is not None: 
       previous_button = current_button 
       current_button = clicked_button 
      print(previous_button, current_button) 

    # - updates - 

    if previous_button == 'RED' and current_button == 'BLUE': 
     print('correct buttons clicked: RED & BLUE') 
     previous_button = None 
     current_button = None 

    # - draws - 

    screen.fill((0,0,0)) 

    for rect, color in buttons.values(): 
     pygame.draw.rect(screen, color, rect) 

    pygame.display.flip() 

    # - FPS - 

    clock.tick(5) 

# - end - 

pygame.quit()