PySDL2 (現在のバージョンは 0.7.0; source / documentation ) 経由で SDL を学習しようとしています。SDL のすべての通常の関数 (だと思います) にctypes Python ラッパーを提供し、そのsdl2.ext
パッケージを介してさらにいくつかの Pythonic 関数を提供して、核心を処理し、結果を Python 型で返します。たとえば、sdl2.ext.get_events()
を呼び出しsdl2.SDL_PumpEvents()
てから、キューのすべてのイベントを覗いて、それらを Python リストとして返します。
ただし、そのような便利な関数が存在するかどうかはわかりませんSDL_GetKeyboardState()
。関数の公式SDL Wiki ドキュメントでは、次のように定義されています。
const Uint8* SDL_GetKeyboardState(int* numkeys)
ここで、numkeys は null の場合があり (それ以外の場合は、返された配列の長さを受け取る)、返された Uint8* は、SDL_Scancode 値でインデックス付けされたキー状態の配列へのポインターであり、キーが押されている場合は 1、押されている場合は 0 を保持します。です。
PySDL2 は を介して SDL_GetKeyboardState を直接呼び出しsdl2.keyboard.SDL_GetKeyboardState(numkeys)
ますが、すぐには役に立たない ctypes 値を返します。
だから私の質問は、PySDL2 を介して現在の SDL キーボードの状態を取得するための Pythonic 関数が他にありますか? 存在する場合、それは何で、どのように使用する必要がありますか? ない場合は、提出する必要がありますか?
参考までに、私はこの機能を自分で実現する方法を考え出したと思いますが、ctypes の大まかな洗礼だったので、何かを台無しにした可能性があります。
import ctypes
import sdl2
KEYBOARD_ARRAY_TYPE = ctypes.c_uint8 * sdl2.SDL_NUM_SCANCODES
def get_keyboard_state():
""" Returns a pointer to the current SDL keyboard state,
which is updated on SDL_PumpEvents. """
raw_keystate = sdl2.keyboard.SDL_GetKeyboardState(None)
pointer = ctypes.cast(raw_keystate, ctypes.POINTER(KEYBOARD_ARRAY_TYPE))
return pointer.contents