pygame.当在主功能之外使用时,MOUSEBUTTONDOWN会记录几次点击



看看代码:

import pygame 
import sys
def check(screen, event):
pos = 0
pos = positionNow(event)
def positionNow(event):
if event.type == pygame.MOUSEBUTTONDOWN:
val = pygame.mouse.get_pos()
print(val)
def main():
pygame.init()
screen = pygame.display.set_mode((600, 600))
running = True
while running:  
events = pygame.event.get()
for event in events:
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
check(screen, event)
pygame.display.update()
main()

示例输出:

(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)
(333, 268)

我使用pygame.MOUSEBUTTONDOWN方法来获取单击任何鼠标按钮时鼠标的坐标。问题是,当我在主函数内部的WHILE循环之外将pygame.MOUSEBUTTONDOWN作为一个单独的函数时,它会多次打印出val(单击按钮时鼠标的坐标(。我只想按pygame.MOUSEBUTTONDOWN的要求打印一次。

现在,我可以在main()的while循环下拥有所有内容,并使其工作如下所示。但我的目标是将此作为一个单独的功能来完成。

import pygame 
import sys
def main():
pygame.init()
screen = pygame.display.set_mode((600, 600))
running = True
while running:  
events = pygame.event.get()
for event in events:
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.MOUSEBUTTONDOWN:
val = pygame.mouse.get_pos()
print(val)
pygame.display.update()
main()

示例输出:

(389, 86)

为什么会发生这种情况,我该如何克服它?

这是缩进的问题。您必须在事件循环中调用check,而不是在事件循环之后调用:

def main():
pygame.init()
screen = pygame.display.set_mode((600, 600))
running = True
while running:  
events = pygame.event.get()
for event in events:
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# INDENTATION
#-->|
check(screen, event)

pygame.display.update()
main()

最新更新