2

イベントをリッスンする以外にマウスの位置を取得する方法をまったく理解していませんが、イベント キューが空の状況では、これはどのように達成されますか?

pygamers の pysdlのドキュメントでは、 sdl2.mouse.SDL_GetMouseState() ( doc here ) の使用が推奨されていますが、この関数には、実際には、質問したいカーソルの x、y 座標が必要です一方、呼び出すとsdl2.mouse.SDL_GetCursor()カーソル オブジェクトが返されますが、そこから座標を取得する方法が見つかりません (つまり、C オブジェクトをラップしているだけなので、.__dict__属性が空です)。

私は考えられる限りのことを試してきましたが、これまで C でプログラミングしたことはありません。私が作成しようとしている単純なラッパー関数は次のとおりです。

def mouse_pos(self):
            #  ideally, just return <some.path.to.mouse_x_y> 
            event_queue = sdl2.SDL_PumpEvents()
            state = sdl2.mouse.SDL_GetMouseState(None, None)  # just returns 0, so I tried the next few lines
            print state
            for event in event_queue:
                if event.type == sdl2.SDL_MOUSEMOTION:
            #  this works, except if the mouse hasn't moved yet, in which case it's none        
            return [event.x, event.y] 
4

2 に答える 2

4

SDL_GetMouseState()SDL2 C 関数のラッパーです。したがって、そこから値を取得するには ctypes を使用する必要があります。元の SDL2 関数は、カーソル位置を格納するために 2 つのポインター (x と y) を受け取ります。

以下のスニペットはあなたのために正しいことをします:

import ctypes
...
x, y = ctypes.c_int(0), ctypes.c_int(0) # Create two ctypes values
# Pass x and y as references (pointers) to SDL_GetMouseState()
buttonstate = sdl2.mouse.SDL_GetMouseState(ctypes.byref(x), ctypes.byref(y))
# Print x and y as "native" ctypes values
print(x, y)
# Print x and y as Python values
print(x.value, y.value)

`

于 2015-01-16T07:22:27.903 に答える