Nanashi-soft○プログラマ専用○Windows gcc SDL○
SDL_JoystickNumAxes関数でコントローラの軸数が取得できるそうで、試してみると『28』と表示された
どういう時に、その値が変化するのか検証してみたところ、ボタンをどのぐらいの強さで押し込んできるのかが取得できる事がわかりました
| 0 | 左スティックの左右 | -32767(左)〜32767(右) |
| 1 | 左スティックの上下 | -32767(上)〜32767(下) |
| 2 | 右スティックの左右 | -32767(左)〜32767(右) |
| 3 | 右スティックの上下 | -32767(上)〜32767(下) |
| 8 | ↑ | -32767(放し)〜0(軽く押し)〜32767(強く押し込み) |
| 9 | → | |
| 10 | ↓ | |
| 11 | ← | |
| 12 | L2 | |
| 13 | R2 | |
| 14 | L1 | |
| 15 | R1 | |
| 16 | △ | |
| 17 | ○ | |
| 18 | × | |
| 19 | □ |
#include "SDL.h"
int main(int args,char *argp[]){
SDL_Joystick *joystick;
int axes;
int i;
if(SDL_Init(SDL_INIT_VIDEO|SDL_INIT_JOYSTICK) < 0){
return -1;
}
if(0 < SDL_NumJoysticks()){
SDL_JoystickEventState(SDL_ENABLE);
joystick = SDL_JoystickOpen(0);
printf("JoystickName=%s\n", SDL_JoystickName(0));
axes = SDL_JoystickNumAxes(joystick);
printf("JoystickNumAxes=%d\n", axes);
for (i=0; i < axes; i++){
printf("JoystickGetAxis(%d)=%d\n", i, (int)SDL_JoystickGetAxis(joystick, i));
}
}
int done=0;
SDL_Event event;
while(!done){
if(SDL_PollEvent(&event)){
//最初に常にシステム終了記述をする
switch(event.type){
case SDL_QUIT:
done = 1;
break;
case SDL_KEYDOWN:
if (event.key.keysym.sym == SDLK_ESCAPE){
done = 1;
}
break;
case SDL_JOYBUTTONDOWN:
if(SDL_JoystickGetButton(joystick, 16)){ //PS
done = 1;
}
break;
case SDL_JOYAXISMOTION:
//軸の変化を検出するとここに処理が来る
for (i=0; i < axes; i++){
printf("JoystickGetAxis(%d)=%d\n", i, (int)SDL_JoystickGetAxis(joystick, i));
}
break;
}
}
}
SDL_QuitSubSystem(SDL_INIT_VIDEO|SDL_INIT_JOYSTICK);
}