SDL2 - 未检测到操纵杆?

Posted

技术标签:

【中文标题】SDL2 - 未检测到操纵杆?【英文标题】:SDL2 - No Joysticks detected? 【发布时间】:2014-06-20 01:54:42 【问题描述】:

所以,我正在尝试学习如何在 SDL2 中使用操纵杆,并且我正在关注 LazyFoo 的教程 (Gamepads and Joysticks),但我一定是做错了什么,因为我的程序无法检测到我的控制器!

Windows 检测到它(我使用的是 Windos 7 和无线 Xbox 360 控制器)并且 LazyFoo 的示例(我从上面的链接下载的)也检测到了我的控制器!

我搜索并尝试了一些东西,但我尝试的任何东西似乎都不起作用......

这是我的初始化:

if (SDL_Init(SDL_INIT_EVERYTHING) < 0)
    cout << "Error initializing SDL!" << endl;
    return 1;

这部分在我的 Input 类的构造函数中,它应该“启动”操纵杆(并且还检测来自键盘的事件):

if (SDL_NumJoysticks() < 1)
    cout << "No joystick detected." << endl;

else
    controller = SDL_JoystickOpen(0);
    if (controller == NULL)
        cout << "Error: Unable to open Joystick." << endl;
    
    else
        isUsingJoystick = true;
    

我也尝试在 Init 和 SDL_JoystickUpdate() 之后使用 SDL_JoystickEventState(SDL_ENABLE),但也没有用...

我忘记了什么?

如果你们愿意,我可以用我的 Input 类的代码编辑帖子...

编辑:我忘了说,即使我的控制器已连接并且一切正常,SDL_NumJoysticks() 返回 0...

【问题讨论】:

代码的第二部分是否有效?,您是否正确阅读了事件? @this 我不这么认为...我可以从键盘读取事件,但不能从操纵杆读取。另外,正如我在帖子中编辑的那样,SDL_NumJoysticks() 返回 0,所以就像没有插入控制器一样...... 请不要在标题中添加“[已解决]”。表明问题已解决的方法是接受答案。 (强调自己的答案是完全可以接受的。) 【参考方案1】:

我发现我做错了什么。事实证明,我试图在初始化 SDL 之前打开我的操纵杆(我在 Input 类的构造函数中打开了我的操纵杆,但我在 SDL_INIT_EVERYTHING 之前创建了我的 Input 类的唯一实例.)

我认为仅凭我写的信息是不可能发现这一点的,很抱歉打扰。

【讨论】:

以上是关于SDL2 - 未检测到操纵杆?的主要内容,如果未能解决你的问题,请参考以下文章

使用麦克风录制时,SDL 音频捕获未检测到任何音频

如何正确检测 sdl2 中的按键按下和释放

如何检测哪个操纵杆按下了按钮?

pygame:检测操纵杆断开连接,并等待它重新连接

在 Pygame 中无法检测到 Xbox 控制器的移动

SDL 2无法打开控制器但操纵杆已识别