keydown python不能同时移动鼠标?

时间:2012-03-28 02:42:34

标签: python pygame

我需要能够在处理keydown事件时移动鼠标。

我该怎么做?

这是我现在使用的基本代码:

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 个答案:

答案 0 :(得分:2)

你的循环的主要问题是你在“帧”之间没有延迟 - 也就是你只是以最大CPU速度循环事件循环 - 这使得按键生成很多(很多意思可能大约数百万)已读取的按键事件。

所以:

  1. 使用x在您的whiel循环中插入pygame.time.delay(x) 介于15到100之间 - 这会给你这么多 互动间暂停的几毫秒
  2. 在循环中插入一个pygame.event.pump()调用 - 这将保持他的事件 缓冲流动,防止细微的不良行为 不同的系统
  3. 这与您的问题无关 - 但是, 绝对不需要“-1*moveSpeed”之类的东西 获取变量的负值 - 只需使用“-moveSpeed” 代替。
  4. 此外,这应该可以阻止冻结,但是pygame只能在自己的显示窗口内捕获鼠标或键事件 - 你没有初始化 - 你必须调用pygame.display.set_mode来实际看到的东西。