/// <summary> /// 接收手柄消息 /// </summary> /// <param name="msg"></param> private void OnGamepadMessage(IMessage msg) { switch (msg.GetMessageType()) { case MessageType.Keyboard: MessageKeyboard kb = msg as MessageKeyboard; if (kb.State == KeyboardState.KeyDown) { keyDownPool.Add(kb.KeyCode); keyPressPool.Add(kb.KeyCode); } else if (kb.State == KeyboardState.KeyUp) { keyUpPool.Add(kb.KeyCode); if (keyPressPool.Contains(kb.KeyCode)) { keyPressPool.Remove(kb.KeyCode); } } break; case MessageType.Rocker: MessageRocker r = msg as MessageRocker; if (r.State == KeyboardState.KeyDown) { keyDownPool.Add(r.KeyCode); keyPressPool.Add(r.KeyCode); } else if (r.State == KeyboardState.KeyUp) { keyUpPool.Add(r.KeyCode); if (keyPressPool.Contains(r.KeyCode)) { keyPressPool.Remove(r.KeyCode); } } Rocker rocker; if (Rockers.TryGetValue(r.DevID, out rocker)) { rocker.X = r.Rx; rocker.Y = r.Ry; } break; case MessageType.Gyro: MessageGyro g = msg as MessageGyro; Gyro gyro; if (Gyros.TryGetValue(g.DevID, out gyro)) { gyro.Gravity = g.Gravity; gyro.Attitude = g.Attitude; gyro.RotationRate = g.RotationRate; gyro.UserAcceleration = g.UserAcceleration; } break; } }