首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SDL_GAMECONTROLLERCONFIG与SDL_GameControllerAddMappingsFromFile

SDL_GAMECONTROLLERCONFIG与SDL_GameControllerAddMappingsFromFile
EN

Stack Overflow用户
提问于 2019-01-06 07:59:25
回答 1查看 1.8K关注 0票数 0

我在游戏中使用了SDL_GameControllerAddMappingsFromFile,并且在gamecontrollerdb.txt文件中添加了一个新的游戏控制器。我使用SDL2 Gamepad工具创建映射并将其添加到gamecontrollerdb.txt文件中。如果我将环境变量SDL_GAMECONTROLLERCONFIG设置为指向映射,那么一切都会正常工作。但是,当我删除环境变量时,即使将相同的映射添加到文件中,映射也不起作用。

我已经使用了这里指定的适当工具check.py:https://github.com/gabomdq/SDL_GameControllerDB

工具显示该文件看起来很好。我使用的是SDL2的最新官方版本(2.0.9),运行在Windows10下。我的代码是跨平台的,我已经在Raspian下对其进行了测试,结果同样令人沮丧。

Windows使用正确的名称识别蓝牙控制器,并且在加载文件时没有收到错误消息(在我看来,读取文件时根本没有错误检查)。

我已经用其他几个游戏控制器测试了代码,它们在Windows / OSX和Linux上都能正常工作。

代码语言:javascript
运行
复制
if (SDL_GameControllerAddMappingsFromFile("gamecontrollerdb.txt") == -1) {
    std::cout << "Warning: Failed to load game controller mappings: " << SDL_GetError() << std::endl;
}

可以在以下位置找到实际使用控制器的代码:https://github.com/drpatrik/combatris/blob/develop/combatris/src/combatris.cpp

我希望控制器能够被识别,因为映射显然是有效的,并且被添加到文件中。

EN

Stack Overflow用户

发布于 2019-01-06 08:50:14

我发现了问题所在。有些游戏手柄被视为操纵杆,这意味着您需要同时打开游戏手柄和操纵杆事件,并同时侦听来自这两个事件的附加事件:

代码语言:javascript
运行
复制
SDL_JoystickEventState(SDL_ENABLE);
SDL_GameControllerEventState(SDL_ENABLE);

以及:

代码语言:javascript
运行
复制
...
case SDL_JOYDEVICEADDED:
case SDL_CONTROLLERDEVICEADDED:
票数 3
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54057443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档