我刚刚为 SDL2 设置游戏手柄,我一直在为该SDL_GameControllerAddMapping
功能创建映射。除了我的垫子上的运动轴和观察轴外,一切都正常工作。
像这样设置:
game_state->joystick = SDL_JoystickOpen( 0 );
然后听这样的事件:
SDL_Joystick* js = game_state->joystick;
for ( unsigned int i = 0; i < SDL_JoystickNumAxes( js ); ++i )
{
int axis = SDL_JoystickGetAxis( js, i );
printf( "a%d: %d\n", i, axis );
}
像这样关闭:
SDL_JoystickClose( game_state->joystick );
目前game_state
只是一个结构,其中只有一个SDL_Joystick*
。
我得到类似这样的输出:
a0: 0
a1: 0
a2: -32768
a3: 0
a4: 0
a5: -32768
如果我一直扣动扳机,我会得到:
a0: 0
a1: 0
a2: 32767
a3: 0
a4: 0
a5: 32767
这告诉我触发器应该映射到 a2 和 a5,但移动轴和观察轴不会改变这些值,并且它们不会出现在任何其他操纵杆输入类型中。我已经用过SDL_JoystickGetHat
,SDL_JoystickGetButton
和SDL_JoystickGetBall
来映射焊盘的其余部分。
其他按钮也不会更改这些值。我不确定,但我可能遗漏了一些东西。我浏览了 SDL2 wiki,但没有找到任何帮助。我也用谷歌搜索了我的垫子的映射,但我唯一能找到的是这个。不幸的是,他们错过了我的。其他谷歌结果建议使用 Steam 的大图片模式来配置我的平板电脑,因为这会生成 SDL2 映射,但我的大脑不会参与,我不明白我应该做什么。
我正在使用这些驱动程序。在安装它们之前,我的垫子根本不被识别。安装后我遇到了这个问题。
更新:
我玩过 jstest-gtk,它报告了同样的事情。它说存在六个轴,但是 0、1、3、4 似乎没有被板上的任何东西触发。
编辑:
哦,我忘了提到我使用的是 ubuntu 15.10。
更新 2:
我现在有一个官方的 xbox one pad,它工作正常。另一个垫的问题仍然存在。这是一款适用于 Xbox One 的冰糖有线控制器。
我也在 Steam 上使用了这两个垫子。冰糖的问题也存在。现在我将假设这是驱动程序的问题。源代码可用,但我没有使用 Linux 内核的经验,所以为了我的系统,我将不理会它。