PYGAME,只有屏幕上的一个按钮有效

时间:2020-10-22 14:34:26

标签: python function button pygame

我已经创建了一个按钮功能,并且可以使用,但是如果我在屏幕上多次使用该功能,那么它将只能在其中一个按钮上使用,我不确定为什么。

这是按钮功能的代码。

#sample matrix
n = 4
mat = [[randint(0,1) for _ in range(n)] for _ in range(n)]

arr = np.random.randint(0, size=(4, 2))

for col in range(n):
    arr[n][1] = n
    arr[n][2] = np.where(col == 1)

这是我尝试使用它的代码,第一个使它启动game_loop的按钮起作用,但是应该退出的按钮却没有

def button(x, y, w, h, action=None):

    mx, my = pygame.mouse.get_pos()

    for event in pygame.event.get():

        if x + w > mx > x and y + h > my > y:
            if event.type == pygame.MOUSEBUTTONDOWN:
                action()

1 个答案:

答案 0 :(得分:0)

问题是,您有多个事件循环。 pygame.event.get()获取所有消息并将其从队列中删除。如果在多个事件循环中调用pygame.event.get (),则只有一个循环接收事件,但绝不会所有循环都接收所有事件。结果,似乎缺少一些事件。

在应用程序循环中一次获取事件,并将事件列表(event_list)传递给button函数。
此外,在发生mosue事件(例如MOUSEBUTTONDOWN)的情况下,当前鼠标位置存储在pygame.event.Event对象的pos属性中(请参见pygame.event模块):

def button(x, y, w, h, event_list, action=None):

    for event in event_list:
       
        if event.type == pygame.MOUSEBUTTONDOWN:
            mx, my = event.pos
            if x + w > mx > x and y + h > my > y:
                action()
def game_intro():
    intro = True
    while intro:

        event_list = pygame.event.get() # get list of events only once

        for event in event_list:
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()

    # [...]

    button(100, 150, 393, 393, event_list, game_loop)
    button(575, 150, 393, 393, event_list, quit)

    # [...]