我已经创建了一个按钮功能,并且可以使用,但是如果我在屏幕上多次使用该功能,那么它将只能在其中一个按钮上使用,我不确定为什么。
这是按钮功能的代码。
#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()
答案 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)
# [...]