Я пытался получить мой код, собирающий информацию о том, какая кнопка мыши нажата и ее положение, но всякий раз, когда я запускаю приведенный ниже код, окно pygame зависает, и оболочка/код продолжает выводить начальную позицию мыши. Кто-нибудь знает, почему это происходит и, что важнее, как это исправить? (Для кода ниже я использовал этот веб-сайт https://www.pygame.org/docs/ref/mouse.html и другие ответы о переполнении стека, но они не были достаточно конкретными для моей проблемы.)
clock = pygame.time.Clock()
# Set the height and width of the screen
screen = pygame.display.set_mode([700,400])
pygame.display.set_caption("Operation Crustacean")
while True:
clock.tick(1)
screen.fill(background_colour)
click=pygame.mouse.get_pressed()
mousex,mousey=pygame.mouse.get_pos()
print(click)
print(mousex,mousey)
pygame.display.flip()
Вы должны регулярно вызывать одну из функций pygame.event
(например, pygame.event.pump
или for event in pygame.event.get():
pygame.mouse.get_pressed
, в противном случае pygame.mouse.get_pressed
(и некоторые функции джойстика) не будут работать правильно, и окно пигмея через некоторое время перестает отвечать на запросы.
Вот работающий пример:
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
clock = pygame.time.Clock()
BG_COLOR = pygame.Color('gray12')
done = False
while not done:
# This event loop empties the event queue each frame.
for event in pygame.event.get():
# Quit by pressing the X button of the window.
if event.type == pygame.QUIT:
done = True
elif event.type == pygame.MOUSEBUTTONDOWN:
# MOUSEBUTTONDOWN events have a pos and a button attribute
# which you can use as well. This will be printed once per
# event / mouse click.
print('In the event loop:', event.pos, event.button)
# Instead of the event loop above you could also call pygame.event.pump
# each frame to prevent the window from freezing. Comment it out to check it.
# pygame.event.pump()
click = pygame.mouse.get_pressed()
mousex, mousey = pygame.mouse.get_pos()
print(click, mousex, mousey)
screen.fill(BG_COLOR)
pygame.display.flip()
clock.tick(60) # Limit the frame rate to 60 FPS.
pygame.event.pump
событий илиpygame.event.pump
. Вы также можете использоватьpygame.event.wait
илиpygame.event.poll
.