我正在使用 python 的新(ish)SDL2 包装器PySDL2,我似乎看不到事件队列上弹出任何操纵杆事件。Keydown 事件很好,当我明确地轮询操纵杆时,我可以很好地获得轴状态(并观察它随着我移动轴而改变,正如预期的那样)。这是我使用队列的代码:
import sdl2
import sdl2.ext
sdl2.SDL_Init(sdl2.SDL_INIT_VIDEO)
sdl2.SDL_Init(sdl2.SDL_INIT_JOYSTICK)
joystick = sdl2.SDL_JoystickOpen(0)
sdl2.ext.Window("test", size=(800,600),position=(0,0),flags=sdl2.SDL_WINDOW_SHOWN)
window.refresh())
while True:
for event in sdl2.ext.get_events():
if event.type==sdl2.SDL_KEYDOWN:
print sdl2.SDL_GetKeyName(event.key.keysym.sym).lower()
elif event.type==sdl2.SDL_JOYAXISMOTION:
print [event.jaxis.axis,event.jaxis.value]
这会打印出所有 keydown 事件,但不会打印出任何轴运动事件。相反,这是我明确轮询轴状态的代码:
import sdl2
import sdl2.ext
sdl2.SDL_Init(sdl2.SDL_INIT_VIDEO)
sdl2.SDL_Init(sdl2.SDL_INIT_JOYSTICK)
joystick = sdl2.SDL_JoystickOpen(0)
while True:
sdl2.SDL_PumpEvents()
print sdl2.SDL_JoystickGetAxis(joystick,0)
哪个工作正常,但如果状态没有改变,我不想浪费时间轮询状态,所以如果我能让它工作,我更喜欢事件队列方法。有什么建议么?
如果重要的话,我在 Mac OS 10.9 上运行 python 2.7.5。我试过罗技 USB 游戏手柄和 Xbox 360 有线游戏手柄(通过 tattiebogle.net 驱动程序启用)。上面我讨论了轴事件,因为这是我需要的,但我已经检查过了,没有任何操纵杆事件发布到事件队列中。