PyGameを受けていないイベントが3+キーが押されると同時に
-
05-09-2019 - |
質問
に展開している簡単なゲーム PyGame...ロケット艦飛び撮影のもの。
質問 なぜpygame発光停止キーボードイベント過ぎる場合は場合にキーが押されるかな?
での取り扱い: のプログラムは複数の変数のように KEYSTATE_FIRE, KEYSTATE_TURNLEFT
, など---。
- の場合
KEYDOWN
イベントは、取り扱いを設定し、対応するKEYSTATE_*
変数値はTrueです。 - の場合
KEYUP
イベントの取り扱いで同じ変数にFalseになります。
の問題:
の場合 UP-ARROW
や LEFT-ARROW
が押されると同時に、pygameが出ない、 KEYDOWN
イベントの場合 SPACE
(余白)サイズを変更します。この動作によって異なります。ボタンを押した場合に、文字にいるようで約5の前にpygame駅発光 KEYDOWN
イベントのための追加の鍵となります。
検証 私のメインループは、単に印刷し各イベント受信確認の上の行動です。
コード: 参考までに、ここでは、(原)取扱いにつきましてはキーイベントでのこの点:
while GAME_RUNNING:
FRAME_NUMBER += 1
CLOCK.tick(FRAME_PER_SECOND)
#----------------------------------------------------------------------
# Check for events
for event in pygame.event.get():
print event
if event.type == pygame.QUIT:
raise SystemExit()
elif event.type == pygame.KEYDOWN and event.dict['key'] == pygame.K_UP:
KEYSTATE_FORWARD = True
elif event.type == pygame.KEYUP and event.dict['key'] == pygame.K_UP:
KEYSTATE_FORWARD = False
elif event.type == pygame.KEYDOWN and event.dict['key'] == pygame.K_DOWN:
KEYSTATE_BACKWARD = True
elif event.type == pygame.KEYUP and event.dict['key'] == pygame.K_DOWN:
KEYSTATE_BACKWARD = False
elif event.type == pygame.KEYDOWN and event.dict['key'] == pygame.K_LEFT:
KEYSTATE_TURNLEFT = True
elif event.type == pygame.KEYUP and event.dict['key'] == pygame.K_LEFT:
KEYSTATE_TURNLEFT = False
elif event.type == pygame.KEYDOWN and event.dict['key'] == pygame.K_RIGHT:
KEYSTATE_TURNRIGHT = True
elif event.type == pygame.KEYUP and event.dict['key'] == pygame.K_RIGHT:
KEYSTATE_TURNRIGHT = False
elif event.type == pygame.KEYDOWN and event.dict['key'] == pygame.K_SPACE:
KEYSTATE_FIRE = True
elif event.type == pygame.KEYUP and event.dict['key'] == pygame.K_SPACE:
KEYSTATE_FIRE = False
# remainder of game loop here...
押このシーケンス:
a (down)
s (down)
d (down)
f (down)
g (down)
h (down)
j (down)
k (down)
a (up)
s (up)
d (up)
f (up)
g (up)
h (up)
j (up)
k (up)
ここでは、出力:
<Event(2-KeyDown {'scancode': 30, 'key': 97, 'unicode': u'a', 'mod': 0})>
<Event(2-KeyDown {'scancode': 31, 'key': 115, 'unicode': u's', 'mod': 0})>
<Event(2-KeyDown {'scancode': 32, 'key': 100, 'unicode': u'd', 'mod': 0})>
<Event(2-KeyDown {'scancode': 33, 'key': 102, 'unicode': u'f', 'mod': 0})>
<Event(3-KeyUp {'scancode': 30, 'key': 97, 'mod': 0})>
<Event(3-KeyUp {'scancode': 31, 'key': 115, 'mod': 0})>
<Event(3-KeyUp {'scancode': 32, 'key': 100, 'mod': 0})>
<Event(3-KeyUp {'scancode': 33, 'key': 102, 'mod': 0})>
<Event(2-KeyDown {'scancode': 36, 'key': 106, 'unicode': u'j', 'mod': 0})>
<Event(2-KeyDown {'scancode': 37, 'key': 107, 'unicode': u'k', 'mod': 0})>
<Event(3-KeyUp {'scancode': 36, 'key': 106, 'mod': 0})>
<Event(3-KeyUp {'scancode': 37, 'key': 107, 'mod': 0})>
この共通の課題であ?が回避策?ない場合には、何が最良の方法を扱う複数のキー制御の問題がpygame?
解決
これは、入力の問題ではなく、コードの問題のように聞こえる - 問題はキーボード自体ではありませんあなたは確かにありますか?ほとんどのキーボードを同時に押すことができるキーの数に制限があります。しばしば、あなたは一度に接近しているいくつかのキーよりも多くを押すことができません。
、それをテストするには、単にキーボード上の文字を押すと保持を開始して、新しい文字が表示されて停止したときに見ています。
私の提案はどこか別のキーにマッピング空間を試してみて、何が起こるかを確認することです。
他のヒント
としていeludedて、特に安いので、下端)のキーボードが低い品質 キーボードのマトリクス.これらのキーボード、一定のキーの組み合わせの動きまで以上に高まっている。その他の一般的な副作用できる"幽霊の鍵"を追加キーの押下に表示される入力ストリームませんでした実際に押していただきます。
唯一のソリューション(お問い合わせの関連キーボードのマトリクス)の変更をキーマッピング用キーは別の行/列ステレオ系統のマトリックス、または購入をキーボードにより行います。
一部のキーボードには、一緒に特定のキーを送信することはできません。多くの場合、この制限は、3つのキーに到達されます。
これは非常によく、キーボードに依存してもよいです。私の現在のノーブランドのキーボードは、同時に押された二つの鍵、ゲームで頻繁に痛みをサポートしています。