【发布时间】:2021-12-02 23:40:26
【问题描述】:
我正在用 pygame 编写一个 replit 游戏,我希望 pygame 同时检测左击和右击。我看过诸如this 和this 之类的问题,但它们并没有解决我的问题。使用buttons = pygame.mouse.get_pressed(),我一次只能检测到一次点击。当我左键单击或右键单击时,它可以正常工作,但我无法同时左键和右键单击。 如果我按住左键,我必须双击右键才能检测到它。我希望它在第一时间被检测到。
最小工作示例:
import pygame, sys
screen = pygame.display.set_mode((320, 200))
left = False
right = False
while True:
event = pygame.event.poll()
buttons = pygame.mouse.get_pressed()
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.MOUSEBUTTONDOWN and buttons[0] and not left:
print('left press')
left = True
elif event.type == pygame.MOUSEBUTTONUP and not buttons[0] and left:
print('left release')
left = False
elif event.type == pygame.MOUSEBUTTONDOWN and buttons[2] and not right:
print('right press')
right = True
elif event.type == pygame.MOUSEBUTTONUP and not buttons[2] and right:
print('right release')
right = False
screen.fill((0, 0, 0))
pygame.display.flip()
典型打印输出:
*left click and then release*
left press
left release
*right click and then release*
right press -- buttons = (True, False, False), left = False, right = False
right release -- buttons = (False, False, False), left = True, right = False
*left click, right click, release both*
left press -- buttons = (True, False, False), left = False, right = False
left release -- buttons = (False, False, False), left = True, right = False
*right click, left click, release both*
right press -- buttons = (False, False, True), left = False, right = False
right release -- buttons = (False, False, False), left = False, right = True
*left click, right double click, release right, release left*
left press -- buttons = (True, False, False), left = False, right = False
right press -- buttons = (True, False, True), left = True, right = False
right release -- buttons = (True, False, False), left = True, right = True
left release -- buttons = (False, False, False), left = True, right = False
*left click, right double click, release left, release right*
left press -- buttons = (True, False, False), left = False, right = False
right press -- buttons = (True, False, True), left = True, right = False
left release -- buttons = (False, False, True), left = True, right = True
right release -- buttons = (False, False, False), left = False, right = True
Same situation for the mirrored case of right click and left double click.
【问题讨论】:
-
你能展示一下典型的打印输出是什么样的吗?包括
button、left和right在每次打印时都有哪些值? -
@RandomDavis 包含在问题中。这就是你想要的吗?
-
它必须取决于系统,因为在我的 Linux 上工作
if buttons[0] and buttons[2]:或者它可能需要首先获取所有事件for event in pygame.event.get()并在循环检查之后mouse.get_pressed() -
@furas 我也让它在我的 Mac 上使用 IDLE 工作。然而,这是一个合作项目,所以我必须在replit 上做。该平台上是否有任何解决方法?谢谢。
标签: python python-3.x pygame mouse