ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

使用PySDL2捕捉操纵杆事件

2019-11-22 15:06:12  阅读:423  来源: 互联网

标签:sdl-2 joystick sdl pysdl2 python


我正在使用适用于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]

这将打印出所有击键事件,但不会打印出任何轴运动事件.相反,这是我的代码,用于显式轮询轴状态:

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

解决方法:

事实证明,从源代码构建SDL2(2.0-1;可通过PySDL2-0.7.0访问)会生成一个构建,其操纵杆事件确实会发布到事件队列中(尽管您确实需要创建一个窗口).看来问题出在我使用的Mac框架版本的SDL2(从here起).

标签:sdl-2,joystick,sdl,pysdl2,python
来源: https://codeday.me/bug/20191122/2060779.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有