我刚刚为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维基,但我找不到任何有用的东西。我还搜索了我的垫子的映射,但我唯一能找到的是this。不幸的是他们想念我的。其他谷歌搜索结果建议使用Steam的大图片模式来配置我的打击垫,因为这将生成SDL2映射,但我的大脑不会参与,我不明白我应该做什么。
我正在使用这些drivers。在安装它们之前我的垫子根本没被识别。安装后我遇到了这个问题。
我玩过jstest-gtk并报告同样的事情。它表示存在六个轴,但是垫片上的任何东西似乎都没有触发0,1,3,4。
哦,我忘了提到我正在使用ubuntu 15.10。
我现在有一个官方的xbox one pad,它运行正常。但是另一个垫的问题仍然存在。这是Xbox One的Rock Candy有线控制器。
我也在Steam上使用这两个垫。摇滚糖果的问题也出现在那里。现在我要假设它是驱动程序的问题。源代码可用,但我没有使用Linux内核的经验,所以为了我的系统,我将不管它。