![](/img/trans.png)
[英]Python/Pygame mouse position not updating and program losing focus
[英]Python Pygame mouse position not updating
我正在尝试使用鼠标位置来实现一个游戏,以查看用户是否单击了按钮。 不知何故,鼠标位置在几秒钟内不会更新,并在几秒钟内更改为新位置,然后重复。 我在屏幕的不同位置移动并按下鼠标,但鼠标位置根本没有改变。 (使用 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()
电话
mouse = pygame.mouse.get_pos()
除非执行MouseMotion
事件,否则不会更新位置。
如果您在 MAC 上的窗口中执行程序,则必须按下、保持和移动鼠标(如果您要按下、保持、然后移动鼠标, pygame.mouse.get_pos()
将返回当前鼠标位置)。
在 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
所以位置的更新应该会更好。
如果按钮有一个矩形,那么您可以使用 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):
这让我疯狂了几个小时。 我有一个类似的问题。 在以下情况下使用 pygame:
Mac OSX版10.13(高塞拉利昂)pygame的1.9.3蟒蛇3.6中的virtualenv
在这个设置中(特别是在 virtualenv 中),没有正确跟踪窗口焦点。 单击并拖动将生成 MOUSEMOTION 事件,但简单地四处移动鼠标不会。 如果未生成 MOUSEMOTION 事件,则调用:
pos = pygame.mouse.get_pos()
将继续报告相同的值,直到发生另一个 MOUSEMOTION 事件。
在 virtualenv 之外安装 pygame,一切都按预期工作。 不是我真正希望的答案,但至少它解释了我所看到的行为。
您的
mouse = pygame.mouse.get_pos()
click = pygame.mouse.get_pressed()
只获取调用时的状态。 根据文档http://www.pygame.org/docs/ref/mouse.html :
要获取所有鼠标事件,最好使用 pygame.event.wait() 或 pygame.event.get() 并检查所有这些事件
那就是您错过了点击次数,因为您的程序没有将它们存储起来进行处理。 您只有在幸运时才能看到它,并且程序会在按钮实际按下时调用该函数。
这显示了一个基本的 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()
希望这可以帮助 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.