Использование MOUSEBUTTONDOWN в Pygame - PullRequest
1 голос
/ 08 декабря 2011

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

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 Ответ

1 голос
/ 08 декабря 2011

Вы уже обнаружили, как проверять тип события (проверяя, 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 = True и flag = False ниже, поскольку они вам больше не нужны.Также избавьтесь от вызова time.sleep ();или, по крайней мере, измените его на разумную частоту кадров (например, time.sleep(0.2) = 50 кадров в секунду).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...