ジョイパッドの状態を取得(Win32API)

Win32API の joyGetPosEx を使ってジョイパッドの状態を取得します。
認識できるコントローラーは管理人が試した所、4つまで出来ました。
JOYSTICKID2+1で3つめのコントローラー、JOYSTICKID2+2で4つめのコントローラーとなります。
今回のプログラムは、オレンジの四角形をジョイパッドの方向キーで移動させます。

ファイル
main.cpp

main.cpp

#pragma comment(linker, "/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup")
#pragma comment(lib,"winmm.lib")

#include <windows.h>
#include <mmsystem.h>
#include <GL/freeglut/freeglut.h>

#define WIDTH 320
#define HEIGHT 240

int x=150,y=80;

void SquareFill2D(int x1,int y1,int x2, int y2){
 glBegin(GL_QUADS);
 glVertex2i(x1,y1);
 glVertex2i(x2,y1);
 glVertex2i(x2,y2);
 glVertex2i(x1,y2);
 glEnd();
}

void display(void)
{
 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 glColor4f(1.0f,0.5f,0.0f,1.0f);
 SquareFill2D(x,y,x+50,y+50);
 glutSwapBuffers();
}
void idle(void)
{
    JOYINFOEX JOYPAD;

 JOYPAD.dwSize = sizeof(JOYINFOEX);
 JOYPAD.dwFlags = JOY_RETURNALL; // 全ての情報を取得

 if(joyGetPosEx(JOYSTICKID1, &JOYPAD) == JOYERR_NOERROR){ // 成功
    if(JOYPAD.dwXpos > 0x7FFF + 0x4000) x+=2;
    if(JOYPAD.dwXpos < 0x7FFF - 0x4000) x-=2;
    if(JOYPAD.dwYpos > 0x7FFF + 0x4000) y+=2;
    if(JOYPAD.dwYpos < 0x7FFF - 0x4000) y-=2;

 //ボタン32個まで 空制御 コピペ用
    if(JOYPAD.dwButtons & JOY_BUTTON1);
    if(JOYPAD.dwButtons & JOY_BUTTON2);
 }
 Sleep(1);
 glutPostRedisplay();
}
void Init(){
 glClearColor(1.0, 1.0, 1.0, 1.0);
 glOrtho(0, WIDTH, HEIGHT, 0, -1, 1);
}
int main(int argc, char *argv[])
{
 glutInitWindowPosition(100, 100);
 glutInitWindowSize(WIDTH, HEIGHT);
 glutInit(&argc, argv);
 glutInitDisplayMode(GLUT_RGBA);
 glutCreateWindow("ジョイパッド");
 glutDisplayFunc(display);
 glutIdleFunc(idle);
 Init();
 glutMainLoop();
 return 0;
}

 

最終更新:2014年12月29日 13:10
添付ファイル