[英]Detect Both Left and Right Mouse Clicks
我正在用 pygame 编写游戏,我希望 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()
典型印刷 Output:
*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.
您可以使用您定义的buttons
变量,如下所示:
import pygame, sys
screen = pygame.display.set_mode((320, 200))
while True:
event = pygame.event.poll()
if event.type == pygame.QUIT: pygame.quit(); sys.exit()
buttons = pygame.mouse.get_pressed()
if buttons[0] and buttons[2]: print('left press and right press')
pygame.display.flip()
这是有效的,因为pygame.mouse.get_pressed()
的每个元素都保持True
,直到您继续按下它所指的按钮。
我重新考虑了您的事件处理:
import pygame, sys
screen = pygame.display.set_mode((320, 200))
left = False
right = False
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.MOUSEBUTTONDOWN:
if event.button == 1: # LMB
print('left press')
left = True
elif event.button == 3: # RMB
print('right press')
right = True
elif event.type == pygame.MOUSEBUTTONUP:
if event.button == 1:
print('left release')
left = False
elif event.button == 3:
print('right release')
right = False
screen.fill((0, 0, 0))
pygame.display.flip()
pygame.quit()
sys.exit()
您描述的测试用例按预期工作,例如左键单击、右键单击、右键释放、左释放显示:
left press
right press
right release
left release
您必须结合pygame.mouse.get_pressed()
和MOUSEBUTTONDOWN
事件。 永远不会同时单击这些按钮。 事件一次发生一个,但pygame.mouse.get_pressed()
指示何时按住键。 检测何时使用 MOUSEBUTTONDOWN 单击按钮并使用MOUSEBUTTONDOWN
pygame.mouse.get_pressed()
检查是否按住另一个按钮:
run = True
while run:
event = pygame.event.poll()
buttons = pygame.mouse.get_pressed()
if evet.type == pygame.QUIT:
run = False
elif event.type == pygame.MOUSEBUTTONDOWN:
# left clicked and right hold down
if event.button == 1 and mouse_buttons[2]:
# [...]
# right clicked and left hold down
elif event.button == 3 and mouse_buttons[1]:
# [...]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.