当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++ Builder教程

在C++Builder中如何使用游戏操纵杆

    在Windows环境下通过编程来操纵鼠标、键盘是一件再简单不过的事了,不过大家有没有想过要尝试一下另一样我们比较常见的输入工具——游戏操纵杆呢?在某些情况下,尤其是象编制一些小型的游戏软件的时候,加入对游戏操纵杆的支持可以给使用者提供更为友好的人机界面,极大的提高游戏软件的可玩性。

    C++Builder中没有专门控制操纵杆函数(其实在常见的编程语言中基本上都没有),因此要增加对游戏操纵杆的支持,就要和Windows的MCI API函数打交道,这里我们首先介绍一些在读取操纵杆的属性、状态,位置和按钮信息时要用到的API函数、常量及数据结构。

    相关常量:

 #define MM_JOY1MOVE         0x3A0    /* 用以传递操纵杆当前状态的一些消息 */

#define MM_JOY2MOVE         0x3A1

#define MM_JOY1ZMOVE        0x3A2

#define MM_JOY2ZMOVE        0x3A3

#define MM_JOY1BUTTONDOWN   0x3B5

#define MM_JOY2BUTTONDOWN   0x3B6

#define MM_JOY1BUTTONUP     0x3B7

#define MM_JOY2BUTTONUP     0x3B8

#define JOY_BUTTON1         0x0001    /* 用以表明当前操纵杆的状态 */

#define JOY_BUTTON2         0x0002

#define JOY_BUTTON3         0x0004

#define JOY_BUTTON4         0x0008

#define JOY_BUTTON1CHG      0x0100

#define JOY_BUTTON2CHG      0x0200

#define JOY_BUTTON3CHG      0x0400

#define JOY_BUTTON4CHG      0x0800

/* 游戏操纵杆错误返回值 */

#define JOYERR_BASE            160

#define JOYERR_NOERROR        (0)                  /* 正常 */

#define JOYERR_ParmS          (JOYERR_BASE+5)      /* 参数错误 */

#define JOYERR_NOCANDO        (JOYERR_BASE+6)      /* 无法正常工作 */

#define JOYERR_UNPLUGGED      (JOYERR_BASE+7)      /* 操纵杆未连接 */

/* 操纵杆标识号 */

#define JOYSTICKID1         0

#define JOYSTICKID2         1

 

    相关函数:

    WINMMAPI UINT WINAPI joyGetNumDevs(void);

    获取设备标识号。

    MMRESULT WINAPI joyGetDevCaps(UINT uJoyID, LPJOYCAPS pjc, UINT cbjc);

    获取操纵杆属性信息,以结构体JoyCaps接收。

    WINMMAPI MMRESULT WINAPI joyGetPos(UINT uJoyID, LPJOYINFO pji);

    获取操纵杆位置和按钮状态,以结构体接收。

    WINMMAPI MMRESULT WINAPI joyGetThreshold(UINT uJoyID, LPUINT puThreshold);

    读取操纵杆移动阈值。

    WINMMAPI MMRESULT WINAPI joyReleaseCapture(UINT uJoyID);

    结束对操纵杆信息的接收。

    WINMMAPI MMRESULT WINAPI joySetCapture(HWND hwnd, UINT uJoyID, UINT uPeriod,

    BOOL fChanged);

    设置接收某一操纵杆的信息的窗口以及将何种频度接收。

    WINMMAPI MMRESULT WINAPI joySetThreshold(UINT uJoyID, UINT uThreshold);

    设置操纵杆移动阈值。

    相关结构体:

 typedef struct joyCaps{

    WORD wMid;                  /* 制造商标识 */

    WORD wPid;                  /* 生产编号 */

    char szPname[MAXPNAMELEN];  /* 产品名称 */

    UINT wXmin;                 /* X轴最小值 */

    UINT wXmax;                 /* X轴最大值 */

    UINT wYmin;                 /* Y轴最小值 */

    UINT wYmax;                 /* Y轴最大值 */

    UINT wZmin;                 /* Z轴最小值 */

    UINT wZmax;                 /* Z轴最大值 */

    UINT wNumButtons;           /* 按钮数  */

    UINT wPeriodMin;            /* 最小调用间隔时间(单位 毫秒)*/

    UINT wPeriodMax;            /* 最大调用间隔时间(单位 毫秒)*/

}JOYCAPS, *PJOYCAPS, NEAR *NPJOYCAPS, FAR *LPJOYCAPS;

 

typedef struct joyInfo{

    UINT wXpos;                 /* x 轴位置 */

    UINT wYpos;                 /* y 轴位置 */

    UINT wZpos;                 /* z 轴位置 */

    UINT wButtons;              /* 按钮状态 */

} JOYINFO, *PJOYINFO, NEAR *NPJOYINFO, FAR *LPJOYINFO;

    以上这些定义存储在mmsystem.h文件中,所以程序要包含这个头文件。

共2页 首页 上一页 1 2 下一页 尾页 跳转到
相关内容
赞助商链接