質問

に展開している簡単なゲーム PyGame...ロケット艦飛び撮影のもの。


質問 なぜpygame発光停止キーボードイベント過ぎる場合は場合にキーが押されるかな?

での取り扱い: のプログラムは複数の変数のように KEYSTATE_FIRE, KEYSTATE_TURNLEFT, など---。

  1. の場合 KEYDOWN イベントは、取り扱いを設定し、対応する KEYSTATE_* 変数値はTrueです。
  2. の場合 KEYUP イベントの取り扱いで同じ変数にFalseになります。

の問題: の場合 UP-ARROWLEFT-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つのキーに到達されます。

これは非常によく、キーボードに依存してもよいです。私の現在のノーブランドのキーボードは、同時に押された二つの鍵、ゲームで頻繁に痛みをサポートしています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top