快速业务通道

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

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-29
_NOERROR )

     {

      Connected = true;

      JoystickID = JOYSTICKID1;

    }

    //如果发生INVALIDPARAM错误,则退出。

    else if(JoyResult == MMSYSERR_INVALPARAM)

      Application->MessageBox("An error occured while calling joyGetPos",

                              "Error", MB_OK);

    // 如果第一个操纵杆为连接,则检查第二个操纵杆。

    else if((JoyResult=joyGetPos(JOYSTICKID2,&JoyInfo)) == JOYERR_NOERROR)

    {

      Connected = true;

      JoystickID = JOYSTICKID2;

    }

  }

}

在确定操纵杆已正确连接之后就可以读取操纵杆的设备信息。

void TForm1::ShowDeviceInfo(void)

{

  joyGetDevCaps(JoystickID,&JoyCaps, sizeof(JOYCAPS));

  Label1->Caption = "Number of joysticks supported by driver = " +

                           IntToStr(DriverCount);

  Label2->Caption = "Current Joystick ID = " +

                              IntToStr(intJoystickID);

  Label3->Caption = "Manufacturer ID = " +

                          IntToStr(JoyCaps.wMid);

  Label4->Caption = "Product ID = " +

                          IntToStr(JoyCaps.wPid);

  Label5->Caption = "Number of buttons = "+

                                IntToStr(JoyCaps.wNumButtons);

  .

  .

  .

  // 设置当前窗口接收操纵杆信息。

  if(Connected)

    joySetCapture(Handle,JoystickID,2*JoyCaps.wPeriodMin,FALSE);

  //计算操纵杆活动范围和屏幕范围的比率,在后面绘制操纵杆标志时会用到。

  XDivider = (JoyCaps.wXmax - JoyCaps.wXmin)/ Width;

  YDivider = (JoyCaps.wYmax - JoyCaps.wYmin)/ Height;

}

读取操纵杆位置信息和按钮状态:

void TForm1::ShowStatusInfo(void)

{

  if(Connected)

  {

    JOYINFO JoyInfo;

    TPoint Position;

    joyGetPos(JoystickID,&JoyInfo);

    Position.x = JoyInfo.wXpos;

    Position.y = JoyInfo.wYpos;

  //显示操纵杆的X、Y轴位置。

    Label6->Caption = "X Position = " + IntToStr(int(JoyInfo.wXpos));

    Label7->Caption = "Y Position = " + IntToStr(int(JoyInfo.wYpos));

  //判断某按钮是否被按下,这里只是指按钮初始的状态。

    if(JoyInfo.wButtons & JOY_BUTTON1)

      Label8->Caption = "Button 1 = Pressed";

    else

      Label8->Caption = "Button 1 = Not Pressed";

   }

}

下面可以编写用以响应当初在头文件中定义的事件JMMove、JMButtonUpdate的代码: JMButtonUpdate的代码:

void __fastcall TForm1::JMMove(TMessage &msg)

{

  /*当操纵杆位置发生变化时会自动调用本函数。

在本函数中经常是根据操纵杆当前的位置来绘制操纵杆在屏幕上显示的标志,并擦   去原来的标志。这里只是简单的改变Image的坐标位置来表示操纵杆为的移动。 */

  Position.x = msg.LParamLo;

  Position.y = msg.LParamHi;

  //计算新的坐标。

  ScreenX = (Position.x-

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号