Python, положение мыши Pygame и какая кнопка нажата

1

Я пытался получить мой код, собирающий информацию о том, какая кнопка мыши нажата и ее положение, но всякий раз, когда я запускаю приведенный ниже код, окно 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

1 ответ

1
Лучший ответ

Вы должны регулярно вызывать одну из функций 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.
  • 0
    Будет ли работать любое pygame.event?
  • 1
    Я добавил пример, в котором я показываю вам, как использовать цикл pygame.event.pump событий или pygame.event.pump . Вы также можете использовать pygame.event.wait или pygame.event.poll .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню