private void OnTimerCallback2(object state) { JoystickAPI.JOYINFOEX infoEx_PR = new JoystickAPI.JOYINFOEX(); JoystickAPI.JOYINFOEX infoEx_Y = new JoystickAPI.JOYINFOEX(); JoystickAPI.JOYINFOEX infoEx_T = new JoystickAPI.JOYINFOEX(); Axis axis_now = PreviousAxis2; if (joystick_PR2.getinfo(ref infoEx_PR) == JoystickAPI.JOYERR_NOERROR) { JoystickButtons buttons = joystick_PR2.GetButtons(infoEx_PR.dwButtons); JoystickAxis axis = joystick_PR2.GetAxis(ref infoEx_PR); if (PreviousButtons2 != buttons) { //按钮状态有更改,则发出ButtonUp事件 //取得前一次按下的按钮与本次按下的按钮的差(即不再处于按下状态的按钮) JoystickButtons b = (JoystickButtons)(PreviousButtons2 - (PreviousButtons2 & buttons)); JoystickButtons n = (JoystickButtons)(buttons - (PreviousButtons2 & buttons));//新按下的按钮; if (b != JoystickButtons.None) { this.Dispatcher.Invoke(new ButtonsUpCallBack(buttonUp2), b); } if (n != JoystickButtons.None) { this.Dispatcher.Invoke(new ButtonsDownCallBack(buttonDown2), n); } PreviousButtons2 = buttons; } axis_now.Pitch = Convert.ToDouble(axis.Ypos - joystick_PR2.JoystickCAPS.wYmin) * 100 / (joystick_PR2.JoystickCAPS.wYmax - joystick_PR2.JoystickCAPS.wYmin); axis_now.Roll = Convert.ToDouble(axis.Xpos - joystick_PR2.JoystickCAPS.wXmin) * 100 / (joystick_PR2.JoystickCAPS.wXmax - joystick_PR2.JoystickCAPS.wXmin); } if (joystick_Y2.getinfo(ref infoEx_Y) == JoystickAPI.JOYERR_NOERROR) { JoystickAxis axis = joystick_Y2.GetAxis(ref infoEx_Y); axis_now.Yaw = Convert.ToDouble(axis.Zpos - joystick_Y2.JoystickCAPS.wRmin) * 100 / (joystick_Y2.JoystickCAPS.wRmax - joystick_Y2.JoystickCAPS.wRmin); } if (joystick_T2.getinfo(ref infoEx_T) == JoystickAPI.JOYERR_NOERROR) { JoystickAxis axis = joystick_T2.GetAxis(ref infoEx_T); //axis_now.Throttle = 100 - Convert.ToDouble(axis.Rpos - joystick_T.JoystickCAPS.wRmin) * 100 / (joystick_T.JoystickCAPS.wRmax - joystick_T.JoystickCAPS.wRmin); axis_now.Throttle = 100 - Convert.ToDouble(axis.Zpos - joystick_T2.JoystickCAPS.wZmin) * 100 / (joystick_T2.JoystickCAPS.wZmax - joystick_T2.JoystickCAPS.wZmin); } if (axis_now.Equals(PreviousAxis2)) { } else { this.Dispatcher.Invoke(new AxisChangeCallBack(axisChange2), axis_now); PreviousAxis2 = axis_now; } }