gpt4 book ai didi

python - 使用 PySDL2 捕捉操纵杆事件

转载 作者:行者123 更新时间:2023-11-28 16:40:40 24 4
gpt4 key购买 nike

我正在玩 python 的新(大概)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]

这会打印出所有按键按下事件,但不会打印出任何轴运动事件。相比之下,这是我显式轮询轴状态的代码:

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 游戏 handle 和 xbox 360 有线游戏 handle (通过 tattiebogle.net 驱动程序启用)。上面我讨论了轴事件,因为这是我需要的,但我已经检查过,没有任何操纵杆事件发布到事件队列。

最佳答案

事实证明,从源构建 SDL2(2.0-1;通过 PySDL2-0.7.0 访问)会产生一个构建,其中游戏杆事件确实发布到事件队列(尽管您确实需要创建一个窗口)。似乎问题出在我使用的 SDL2 的 mac 框架版本(来自 here)。

关于python - 使用 PySDL2 捕捉操纵杆事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19691251/

24 4 0
文章推荐: 使用 Django 服务器主机名和监听端口作为 redirect_uri 的 Python-social-auth
文章推荐: html - 受同级影响的 CSS 绝对定位 div
文章推荐: css - 如何使用 CSS :first-letter pseudo-element in a
文章推荐: css - 并排对齐2个div
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com