GLFWのジョイスティック

3種類あるようだ

  • glfwGetJoystickParam( int joy, int param )
  • glfwGetJoystickPos ( int joy, float *pos, int numaxes )
  • glfwGetJoystickButtons ( int joy, unsigned char *buttons,int numbuttons )

glfwGetJoystickParam( int joy, int param )ジョイスティックのスペックを調べる。

ジョイスティックのパラメータを調べる関数。
GLFW_JOYSTICK_1…16まで可能。
paramどのパラメータを調べたいのか。

GLFW_PRESENT GL_TRUE GL_FALSE.現在ジョイスティックは接続されているかどうか
GLFW_AXES ジョイスティックの軸の数。スーファミコントローラの場合は2だった。xとyってことかな。
GLFW_BUTTONS ジョイスティックのボタンの数スーファミコントローラの場合は8だった。

glfwGetJoystickPos( int joy, float *pos, int numaxes )

矢印キーの挙動を調べる

float pos[2];
    glfwGetJoystickPos (GLFW_JOYSTICK_1,pos,2);
    cout<<"joystick:"<<pos[0]<<","<<pos[1]<<endl;

十字キー GLFW
右x 1.0
左x -1.0
上y 1.0
下y -1.0
なにも押していない場合 GLFW
x -0.000015
y 0.000015

glfwGetJoystickButtons ( int joy, unsigned char *buttons,int numbuttons )

  • buttons….ボタンステートを受け取る配列
  • numbuttons ….何個のボタンを使うか
unsigned char buttons[8];
    glfwGetJoystickButtons ( GLFW_JOYSTICK_1,buttons,8 );

調べるコード

cout<<"num axes="<<glfwGetJoystickParam( GLFW_JOYSTICK_1, GLFW_AXES)<<endl;
    cout<<"num buttons="<<glfwGetJoystickParam( GLFW_JOYSTICK_1, GLFW_BUTTONS)<<endl;
void joystick(){
    unsigned char buttons[8];
    float pos[2];
    glfwGetJoystickButtons ( GLFW_JOYSTICK_1,buttons,8 );
    glfwGetJoystickPos (GLFW_JOYSTICK_1,pos,2);
    printf("pos(%f,%f),",pos[0],pos[1]);
    for(int i=0;i<8;i++){
        printf("bt[%d]=%d,",i,buttons[i]);
    }
    puts("");
}
サポートサイト Wikidot.com