2013-11-01 1 views
0

код до сих пор:выявил входные сигналы геймпад

Device gamepad; 
public bool initializeGamePad() 
     { 
      foreach (DeviceInstance di in Manager.GetDevices(DeviceClass.GameControl, EnumDevicesFlags.AttachedOnly)) 
      { 
       gamepad = new Device(di.InstanceGuid); 
       break; 
      } 

      if (gamepad==null)//no gamepads detected 
       return false; 
      else 
      { 
       configureGamePad(); 
       return true; 
      } 
     } 

     public void configureGamePad() 
     { 
      //Set axis ranges 
      foreach (DeviceObjectInstance doi in gamepad.Objects) 
      { 
       if ((doi.ObjectId & (int)DeviceObjectTypeFlags.Axis) != 0) 
       { 
        gamepad.Properties.SetRange(ParameterHow.ById, doi.ObjectId, new InputRange(-5000, 5000)); 
       } 
      } 

      //Set joystick axis mode absolute 
      gamepad.Properties.AxisModeAbsolute = true; 

      //set cooperative level. 
      gamepad.SetCooperativeLevel(new Form1(), CooperativeLevelFlags.NonExclusive | CooperativeLevelFlags.Background); 

      //Acquire devices for capturing 
      gamepad.Acquire(); 

      UpdateJoystick(); 
     } 

     private void UpdateJoystick() 
     { 
      string info = "Joystick: "; 

      //Get Mouse State 
      JoystickState state = gamepad.CurrentJoystickState; 

      //Capture Position 
      info += "X:" + state.X + " "; 
      info += "Y:" + state.Y + " "; 
      info += "Z:" + state.Z + " "; 
      info += "ARx:" + state. + "\n"; 

      //Capture Buttons 
      byte[] buttons = state.GetButtons(); 
      for (int i = 0; i < buttons.Length; i++) 
      { 
       if (buttons[i] != 0) 
       { 
        info += "Button:" + i + " "; 
       } 
      } 

      MessageBox.Show(info); 
     } 

Проблема заключается в том, что информация строка содержит только значение 0 для state.X/Y/Z, и ничего в отношении кнопок.

Мне нужно что-то вроде этого: button_down & button_release, чтобы нажать 2 или более одновременных кнопок. И осевые позиции.

Также я использую DirectX SKD no SlimDX или anything else.

+0

Ну, вообще говоря, ввод геймпада для игр. Я использовал игровые площадки только через XNA. Не могли бы вы указать, какой тип геймпада вы используете? Xbox Controller, джойстик, общий D-Pad/Analog/4Button/Triggers? –

+0

Я использую беспроводной геймпад гения http://s1.emagst.ro/products/24/23618/images/img50860_02092009105416_350x350c_71dt.jpg –

ответ

1

Возможно, вам придется взаимодействовать с DirectX в управляемой форме. Отъезд this article на SO для более подробной информации. Но в основном это просто опрос для ввода, а затем обработка ваших собственных событий. Если у вас есть дополнительные вопросы, выходящие за рамки «как я это сделаю», не стесняйтесь комментировать, и я отредактирую, если смогу.

+0

Я, похоже, не начинаю писать 1 строку кода. Кажется, что без XNA ничего не работает, но я не хочу делать проект XNA, потому что я не делаю игру. Можете ли вы дать мне небольшой проект в визуальной студии, который может определять вход в геймпад и создавать окно msg каждый раз, когда вы нажимаете клавишу? –

+0

То, о чем вы просите, не подходит для SO. Я привел статью с образцом кода и другими ссылками. Я не могу написать проект, который сделает это за вас. –

+0

Я изменил свой вопрос –

Смежные вопросы