2012-03-28 1 views
2

Мне нужно, чтобы мы могли перемещать мышь, пока я обрабатываю события keydown.не может перемещать мышь в то же время, что и keydown python?

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

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

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 

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

ответ

2

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

Итак:

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

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