3

pygletのドキュメントには、次のように記載されています。

The Window.on_key_press and Window.on_key_release events are fired when
any key on the keyboard is pressed or released, respectively. These events 
are not affected by "key repeat" -- once a key is pressed there are no more
events for that key until it is released.

ただし、Unity のキーボード設定で「キーが押されている間、キーを押すと繰り返す」が選択されている場合、pyglet (1.2alpha1) は、キーが押されたままになると、on_key_press と on_key_release を繰り返します。

この意図しない動作は、設定を切り替える次のスクリプトでテストできます。

import pyglet

window = pyglet.window.Window()

@window.event
def on_key_press(symbol, modifiers):
    print "key press"

@window.event
def on_key_release(symbol, modifiers):
    print "key release"

pyglet.app.run() 

単一のウィンドウのキーリピートを無効にする方法はありますか? 他の回避策も大歓迎です。

この設定はデフォルトでオンになっており、ゲームがオフの設定を要求するのは好ましくありません。

4

1 に答える 1

3

簡単な回避策は次のようになります。

pressed_keys = []

@window.event
def on_key_press(symbol, modifiers):
    if symbol in pressed_keys:
        return
    # handle pressed key
    pressed_keys.append(symbol)

@window.event
def on_key_release(symbol, modifiers):
    if symbol in pressed_keys:
        pressed_keys.remove(symbol)
于 2014-08-09T17:47:26.730 に答える