2016-06-13 4 views
0

마우스 위치를 사용하여 이미지를 화면에 blit하려고했습니다. 이것은 내 코드입니다.마우스 위치에서 화면을 한 번만 blit하는 방법

#Placing the farm 
if farm: 


    if pygame.mouse.get_pressed()[0]: 
     hi = True 
    if hi: 
     screen.blit(farm_image,mouse_pos) 

그래서 기본적으로 나는 마우스를 클릭 할 때는 mouse_position에서 한 번만 화면에 이미지를 블럭 전송하고 싶다. 그러나 그것은하지 이미지를 한 번 표시하지만 mouse_pos로 이동합니다. mouse_position에 한 번만 이미지를 표시하려면 어떻게해야합니까? 이 전에는 메인 루프가 있습니다. 내가 시도한 것은 이미지가 blit 인 후 hi를 False로 설정하는 것이지만 후자의 이미지는 지워진다. 제공 할 수있는 답변을 해주셔서 감사합니다.

+0

단추를 누를 때 팜의 위치를 ​​(x, y) 줄거리로 정의 할 수 있습니다. 그런 다음 True/False 문을 사용하여 첫 번째 진술임을 확인하고 팜 팜 위치를 한 번만 설정합니다. 이렇게하면 팜은 각 프레임에서 계속 블리 팅을 유지합니다. – Sorade

답변

1
당신이 배경마다 모든 화면을 새로 고치 일을하고 농장을 보장 할 수 같은 PythonMaster의 대답은 뭔가가 경우에 모든 프레임에 소총탄 남아 건물에

:

#Placing the farm 
if farm: 

    if pygame.mouse.get_pressed()[0] == False: #resets the first_click to False everytime the button is released 
     first_click = False 

    if pygame.mouse.get_pressed()[0]: 
     if first_click == False: 
      first_click = True 
     else: 
      pass 
     if first_click == True: #set's the farm position it will keep updating the position of the farm as you drag the mouse, if you do not want that set first_click to False here. 
      farm_pos = mouse_pos 
    try: #using try here, prevents errors when farm_pos is not yet defined 
     screen.blit(farm_image,farm_pos) 
    except: 
     print 'farm position not defined yet, click to place' 
+0

그것은 분류가 작동했습니다. 감사합니다 – abc1234

+0

좋은 답변이 거기에 –

1

당신은 당신의 첫 번째 클릭했다 아닌지 확인하기 위해 다른 변수를 사용하여 시도 할 수 :

if pygame.mouse.get_pressed()[0]: 
    if first_click == False: 
     hi = true 
     first_click = True 
    else: 
     pass 

당신이 그것을 사용하기 전에 first_click를 정의해야합니다. 이 코드는 first_click을 사용하여 한 번 클릭했는지 확인합니다. 시작 값은 False이며 마우스를 클릭하면 True으로 변경됩니다. 또한 hiTrue으로 변경하고 두 번째 클릭을 허용하지 않으려면 first_click이 더 이상 False이 아니므로 이로 인해 실질적으로 아무런 효과가없는 elsepass 문이 발생합니다.

+0

그것은 작동하지 않았고 이미지는 여전히 마우스 위치를 잃어 버렸고 아무 것도 클릭하지 않으면 아무 일도 일어나지 않습니다. – abc1234

1

또한 대신 체크 이벤트를 사용할 수 있습니다 한 번의 클릭 만 원하는 경우 상태 확인 이는 클릭을 놓치지 않을 것임을 의미하기 때문에 특히 유용합니다 (코드가 사용자 입력을 확인하지 않는 순간에 사용자가 마우스를 클릭하고 놓는 순간 발생할 수 있음). 파이 게임에는 MOUSEBUTTONDOWNMOUSEBUTTONUP이라는 이벤트가 있는데, 둘 다 마우스의 위치와 클릭 된 버튼을 제공합니다.

코드에 통합하는 방법은 나머지 코드에 따라 다릅니다 (예 : 이미 다른 곳에서 파이 게임 이벤트 큐를 사용하고 있다면. 작은 예 :

for event in pygame.event.get(): 
    if event.type == pygame.QUIT: 
     pygame.quit() 
     sys.exit() 
    if event.type == pygame.MOUSEBUTTONDOWN: 
     if farm: 
      screen.blit(farm_image,(event.pos[0], event.pos[1])) 

아직 PythonMaster와 소라, 또는 더 나은에 의해 제안 농장이 배치되면, 상태를 추적하기 위해 변수를 사용 농장에서 농장의 위치와 가시 상태를 저장할 수 object (Sprite)를 선택하고 상태가 visible으로 설정 될 때마다 해당 위치로 blit합니다.