我正在尝试使用鼠标位置实现游戏,以查看用户是否单击了按钮。不知何故,鼠标位置不会更新几秒钟,并且会在几秒钟内更改为新位置,然后重复。我在屏幕的不同位置移动并按下鼠标,但鼠标位置完全没有变化。 (使用IDE PyCharm处理python3.5.1和pygame 1.9.2)有什么想法吗? 这是我的代码:
done = False
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
mouse = pygame.mouse.get_pos()
click = pygame.mouse.get_pressed()
if click[0]==1:
print(mouse)
pygame.display.update()
答案 0 :(得分:3)
电话
mouse = pygame.mouse.get_pos()
除非执行事件MouseMotion
,否则不会更新位置。
如果您在MAC上的窗口中执行程序,则必须按住鼠标,移动鼠标(如果您按住,按住,然后移动鼠标,pygame.mouse.get_pos()
将返回当前鼠标位置)。
答案 1 :(得分:0)
在pygame中有两种处理输入事件的方法:
为了更好地理解它的工作原理: http://www.pygame.org/docs/tut/newbieguide.html#managing-the-event-subsystem
您在代码中使用两者,状态检查:
mouse = pygame.mouse.get_pos()
click = pygame.mouse.get_pressed()
事件处理:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
如果您仍想使用状态检查来获取鼠标位置,可以添加:
clock=pygame.time.Clock()
clock.tick(60) # 60 frames per second
所以这个位置的更新应该更好。
答案 2 :(得分:0)
如果按钮有一个rect,那么你可以使用rect.collidepoint()方法进行事件检查,如下所示:
mouse_pos = pygame.mouse.get_pos()
if event.type == pygame.MOUSEBUTTONDOWN and pygame.mouse.get_pressed()[0] and button.rect.collidepoint(mouse_pos):
答案 3 :(得分:0)
这让我疯了好几个小时。我遇到了类似的问题。 使用pygame:
Mac OSX 10.13(High Sierra) pygame 1.9.3 python 3.6 in virtualenv
在此设置中(特别是在virtualenv中),未正确跟踪窗口焦点。单击并拖动将生成MOUSEMOTION事件,但只是移动鼠标不会。如果未生成MOUSEMOTION事件,请调用:
pos = pygame.mouse.get_pos()
将继续报告相同的值,直到发生另一个MOUSEMOTION事件。
在virtualenv之外安装pygame,一切都按预期工作。不是我希望得到的答案,但至少它解释了我所看到的行为。
答案 4 :(得分:-1)
你的
mouse = pygame.mouse.get_pos()
click = pygame.mouse.get_pressed()
只能在通话时获得状态。根据文档http://www.pygame.org/docs/ref/mouse.html:
要获得所有鼠标事件,最好使用它们 pygame.event.wait()或pygame.event.get()并检查所有这些事件
那就是你错过了点击次数,因为你的程序没有将它们存储到进程中。你只有在幸运时才能看到它,程序在按钮实际关闭时调用该功能。
答案 5 :(得分:-1)
这显示了一个基本的pygame鼠标获取程序。只需单击窗口中的任意位置即可打印鼠标坐标:
import pygame as py
py.init()
white = (255,255,255)
window = (400,400)
screen = py.display.set_mode(window)
clock = py.time.Clock()
done = False
while not done:
for event in py.event.get():
if event.type == py.QUIT:
done = True
elif event.type == py.MOUSEBUTTONDOWN:
print py.mouse.get_pos()
screen.fill(white)
py.display.flip()
clock.tick(30)
py.quit()
希望这有助于:)