Python Pygame鼠标位置没有更新

时间:2016-05-03 03:52:02

标签: python pygame mouseevent mouse-position

我正在尝试使用鼠标位置实现游戏,以查看用户是否单击了按钮。不知何故,鼠标位置不会更新几秒钟,并且会在几秒钟内更改为新位置,然后重复。我在屏幕的不同位置移动并按下鼠标,但鼠标位置完全没有变化。 (使用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()

6 个答案:

答案 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()

希望这有助于:)