当前位置: 首页 > 面试题库 >

Pygame-未检测到鼠标点击

欧阳俊晖
2023-03-14
问题内容

我正在学习Pygame制作带有Python的游戏。但是,我遇到了一个问题。我正在尝试检测播放器当前何时单击屏幕,但是我的代码无法正常工作。我的代码实际上是搞砸了,还是我正在使用的在线Pygame编译器?

import pygame

pygame.init()
screen = pygame.display.set_mode((800, 800))

while True:
  pygame.display.update()
  mouse = pygame.mouse.get_pressed()
  if mouse:
    print("You are clicking")
  else:
    print("You released")

当我运行此代码时,输​​出控制台在每秒几千次内向文本“您正在单击”发送垃圾邮件。即使我没有单击屏幕,它仍然会显示此信息。即使我的鼠标是不是
屏幕上。相同的文字。一遍又一遍。Pygame是否正确执行我的程序?

要学习Pygame,我使用的是开发人员提供的官方文档。https://www.pygame.org/docs/这是一种过时的学习方法,这就是为什么我的代码继续运行错误的原因吗?


问题答案:

pygame.mouse.get_pressed()处理事件时将评估返回的坐标。您需要通过pygame.event.pump()或处理事件pygame.event.get()

pygame.event.get()

对于游戏的每一帧,您都需要对事件队列进行某种调用。这样可以确保您的程序可以与操作系统的其余部分进行内部交互。

pygame.mouse.get_pressed()返回表示所有鼠标按钮状态的布尔值序列。您必须评估是否any按了按钮(any(buttons))或订阅是否按了特殊按钮(例如buttons[0])。

例如:

import pygame

pygame.init()
screen = pygame.display.set_mode((800, 800))

run = True
while run:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

    buttons = pygame.mouse.get_pressed()

    # if buttons[0]:  # for the left mouse button
    if any(buttons):  # for any mouse button
        print("You are clicking")
    else:
        print("You released")

    pygame.display.update()

如果只想检测分别释放鼠标键的时间,则必须实现MOUSEBUTTONDOWNand
MOUSEBUTTONUP(请参阅pygame.event模块):

import pygame

pygame.init()
screen = pygame.display.set_mode((800, 800))

run = True
while run:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

        if event.type == pygame.MOUSEBUTTONDOWN:
            print("You are clicking", event.button)
        if event.type == pygame.MOUSEBUTTONUP:
            print("You released", event.button)

    pygame.display.update()

pygame.mouse.get_pressed()返回按钮的当前状态时,
MOUSEBUTTONDOWNMOUSEBUTTONUP仅在按下按钮时出现。



 类似资料:
  • 我想知道如何编写代码来检测鼠标点击精灵。例如:

  • 我正在用python和pygame制作一个选择题问答游戏。我有圆,你想要的是当你点击圆时,它会改变宽度,使圆充满。但我不知道有哪种python函数可以做到这一点 以下是我目前的代码: 我想有这样的东西,如果鼠标悬停在圆圈和鼠标按钮向下和event.button==1然后改变宽度为0(填写) 提前谢谢! P. S.这不是我所有的代码

  • 我在pygame中运行一个游戏,发现了一个漏洞。按照我的编码方式,如果鼠标出了窗口,游戏开始循环。当你得到,它将返回上次在窗口中检测到鼠标的值,但从其他方面看,没有鼠标离开窗口的指示。那么,有没有办法检查鼠标是否已经停止在pygame窗口上悬停,并离开了它?

  • 使用https://altbeacon.github.io/android-beacon-library/samples.html中的代码试图检测IBeacon发射器,该发射器是iOS8,如下http://blog.passkit.com/configure-iphone-ibeacon-transmiter/,在哪一步出错了,我需要在区域中使用BeaconIdentifier作为mymonito

  • 我有一个JTable,其中第3列和第4列使用JComboBox作为单元格编辑器。第3列指定类型,第4列指定子类型。第4列中可用的子类型列表取决于用户为类型选择的值。此外,用户可以编辑类型和子类型列表(这里的详细信息并不重要,只是类型和子类型列表在运行时都可以更改)。 因为子类型组合框的内容是动态的,所以我的目的是检测用户何时单击子类型单元格,并根据该行中类型的内容设置列表模型(设置可用的子类型项列

  • 我想让我的应用程序检测鼠标点击在屏幕上的任何地方,而不必使应用程序聚焦。我想要它检测鼠标事件普遍,即使它最小化。到目前为止,我只能在swing GUI中检测鼠标事件。 Autohotkey可以随时检测鼠标点击并获得鼠标的位置,用Java怎么做到这一点呢?