在pygame中使用MOUSEBUTTONDOWN

1 投票
1 回答
1589 浏览
提问于 2025-04-17 07:57

我正在尝试在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

你已经学会了如何检查事件的类型,比如判断一个事件是否是退出事件(通过检查 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帧)。

撰写回答