【问题标题】:Pygame - Mouse clicks not getting detectedPygame - 未检测到鼠标点击
【发布时间】:2021-01-24 19:23:35
【问题描述】:

我正在学习 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/这是一种过时的学习方式吗,这就是为什么我的代码继续运行错误的原因吗?

【问题讨论】:

  • 这没有意义。你怎么能运行我的代码,它工作得很好......但是当我运行它时,出现错误?你改代码了吗?调整什么?
  • 除非条件首先尝试打印(鼠标)。
  • 当我打印(鼠标)时,它工作得非常好并打印坐标。
  • 没关系,@Rabbid76 解决了我的问题。真是个聪明人。

标签: python python-3.x pygame


【解决方案1】:

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

如果你只是想检测鼠标按键何时被按下分别释放,那么你必须实现MOUSEBUTTONDOWNMOUSEBUTTONUP(参见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 仅在按下按钮时出现。

【讨论】:

  • @Binji any 检查列表中的任何元素是否为真。
  • 使用任何它检测到的左键单击和右键单击查看我的答案
  • @YeshwinVermaTheProgrammer 问题:“我正在尝试检测玩家当前何时点击屏幕” - 提问者没有指定哪个按钮,所以any是一个正确的解决方案。
【解决方案2】:

函数 pygame.mouse.get_pressed 返回一个包含 true 或 false 的列表,因此单击时你应该使用 -

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
  pygame.display.update()
  mouse = pygame.mouse.get_pressed()
  if mouse[0]:
    print("You are clicking")
  else:
    print("You released")

【讨论】:

  • 参见pygame.event.get(): "对于游戏的每一帧,您都需要对事件队列进行某种调用。这样可以确保您的程序可以在内部与其余的操作系统。”。没有事件处理`pygame.mouse.get_pressed()`不会返回任何东西。
猜你喜欢
  • 2021-09-06
相关资源
最近更新 更多