нельзя двигать мышь одновременно с питоном keydown? - PullRequest
2 голосов
/ 28 марта 2012

Мне нужно иметь возможность перемещать мышь во время обработки событий нажатия клавиш.

Как мне это сделать?

Вот основной код, который я сейчас использую:

import pygame, sys
from pygame.locals import *

pygame.init()

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        if event.type == USEREVENT + 1:
            rotate = True;
        if event.type == KEYDOWN:
            if event.key == K_LEFT or event.key == K_a:
                moveX = -1*moveSpeed
            elif event.key == K_RIGHT or event.key == K_d:
                moveX = moveSpeed
            if event.key == K_DOWN or event.key == K_s:
                moveY = moveSpeed
            elif event.key == K_UP or event.key == K_w:
                moveY = -1*moveSpeed

Я не могу двигать мышь, когда работает следующий скрипт, и я нажимаю клавишу вниз.

1 Ответ

2 голосов
/ 28 марта 2012

Основная проблема вашего цикла состоит в том, что у вас нет задержки между «кадрами», то есть вы просто циклически повторяете цикл обработки событий с максимальной скоростью ЦП. Это приводит к тому, что нажатие клавиши генерирует лоты (лоты, вероятно, около миллионов величин) прочитанных событий нажатия клавиш.

Итак:

  1. вставьте pygame.time.delay(x) в петлю, с помощью x где-то между 15 и 100 - это даст вам так много миллисекунды паузы между взаимодействиями
  2. вставить pygame.event.pump() вызов внутри цикла - это сохранит событие Буфер течет по-хапилли и предотвращает тонкое плохое поведение разные системы
  3. это не связано с вашей проблемой - но, абсолютно не нужно такого понятия, как "-1*moveSpeed", чтобы получить отрицательное значение переменной - просто используйте "-moveSpeed" вместо этого.

Кроме того, это должно остановить зависание, но pygame может захватывать события мыши или клавиши только в своем собственном окне дисплея - которое вы не инициализируете - вам придется вызвать pygame.display.set_mode, чтобы действительно что-то увидеть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...