2011-12-08 6 views
1

그래서 파이 게임에서 아주 기본적인 것들을 시도하고 있습니다. 그래서 초심자이기 때문에 처음 며칠입니다. 나는 마우스로 그것을 누를 때마다 무언가의 색깔을 바꾸려고 노력하고있다. 타이밍을 기준으로 색상을 변경하는 방법을 알고 있습니다. 아래에 내 코드가 있습니다. 아래 코드에서 클라우드의 색을 변경하려고합니다. 클라우드를 실행하면 구름이 왼쪽 상단에 표시되고 흰색과 검정색이 매 3 초마다 변경되지만 마우스를 기준으로 변경해야합니다. 감사합니다파이 게임에서 MOUSEBUTTONDOWN 사용

import pygame, time, sys 
from pygame.locals import * 

def drawItem(windowSurface, x, y): 
    pygame.draw.polygon(windowSurface, RED, ((0+x, 100+y),(100+x, 100+y), (50+x, 50+y))) 
    pygame.draw.polygon(windowSurface, GREEN, ((0+x,100+y),(100+x,100+y),(100+x,200+y),(0+x,200+y))) 


pygame.init() 

windowSurface = pygame.display.set_mode((500, 400), 0, 32) 
pygame.display.set_caption("Lab 9") 

BLACK = (0, 0, 0) 
WHITE = (255, 255, 255) 
RED = (255, 0, 0) 
GREEN = (0, 255, 0) 
GRASS = (26, 82, 26) 
SKY = (179,237,255) 

color = SKY 
flag = False 

while True: 
    for event in pygame.event.get(): 
     if event.type == QUIT: 
      pygame.quit() 
     sys.exit() 

    windowSurface.fill(SKY) 

    drawItem(windowSurface,200,120) 
    pygame.draw.rect(windowSurface, GRASS, (0,300,500,500),0) 

    house = ((0+50, 100+50),(100+50, 100+50), (50+50, 50+50), (50+100, 50+100)) 

    for i in range(3): 
     pygame.draw.circle(windowSurface,color, house[i], 80) 

    if flag == False: 
     color = WHITE 
     flag = True 
    elif flag == True: 
     color = BLACK 
     flag = False 

    pygame.display.update() 
    time.sleep(3) 
+1

나는 당신이 지금 당장 그걸 가지고 놀고있는 것을 알고있다. 그러나 그걸 반복 할 때리스트와 튜플의 길이를 사용하는 것은 좋은 습관이다. 그래서'range (3)'보다는'range (len (house)) '를 사용해야합니다 - 이것은'house'의 모든 항목을 반복합니다; 그래서 항목을 추가하기로 결정하면 루프는 첫 번째 항목이 아닌 모든 항목을 반복합니다. – Smashery

+0

그래, 익숙해 지려고합니다. 조언 해 주셔서 감사합니다! – Neemaximo

답변

1

이미 (event.type == QUIT 여부를 확인) 이벤트의 유형을 테스트하는 방법을 발견했습니다.

이 기능을 확장하면 마우스 버튼 클릭 여부를 확인할 수 있습니다. 당신의 for event in pygame.event.get() 루프에서이 스틱 : 당신이 더 이상 필요하지 않기 때문에

if event.type == MOUSEBUTTONDOWN: 
    flag = not flag # This will swap the value of the flag 

그런 다음, 아래의 flag = Trueflag = False 라인을 없애. 또한 time.sleep() 호출을 제거하십시오. 적어도 합리적인 프레임 속도 (예 : time.sleep(0.2) = 초당 50 프레임)로 변경하십시오.

+0

이벤트 및 모든 다른 유형에 대한 더 많은 문서는 http://pygame.org/docs/ref/event.html – Smashery

+0

에서 찾을 수 있습니다. 도움을 주셔서 감사합니다. 덕분에 명확 해졌습니다. – Neemaximo

관련 문제