繁体   English   中英

Python Pygame 鼠标位置未更新

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM