2012-03-28 17 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

メインループの問題は、「フレーム」間に遅延がないことです。つまり、最大CPUスピードでイベントループを循環させるだけです。これにより、キープレスは、キーダウンイベントのロット(おそらく何百万もの大きさの意味)を生成します読み込まれます。だから、

  1. はどこかに15と100の間のx で、あなたのwhielループ内pygame.time.delay(x)を挿入する - これはあなたのinterations
  2. 間の休止のように多くの ミリ秒単位を与える内pygame.event.pump()呼び出しを挿入ループ - これは彼のイベントを維持します バッファーがうんざりに流れ、微妙な悪い振る舞いを防ぎます 異なるシステム
  3. これはあなたの問題とは関係ありませんが、 に「-1*moveSpeed」のようなものの必要は変数の負の値を取得absotelyありません - だけではなく、「-moveSpeed」 を使用しています。

また、これは凍結を停止する必要がありますが、pygameのダウンロードは、独自の表示ウィンドウ内にマウスやキーイベントをキャプチャすることができます - あなたは初期化されていない - あなたは実際に何かを見るためにpygame.display.set_modeを呼び出す必要があります。

関連する問題