Я хотел бы сделать программу, которая использует входы контроллера XBox 360, чтобы дать результаты, например, если вы нажмете на контроллере, она будет таким же, как нажатие на клавиатуре. Я планирую использовать это для разработки игр и не хочу, чтобы выходные данные настраивались, но я хочу, чтобы окно было видимым, чтобы его можно было закрыть в любое время. Как я могу сделать эту программу (для Windows) и прост в использовании.XBox 360 контроллер не настраиваемое отображение
ответ
Я бы посоветовал использовать входной абстрактный класс и преобразовать типы ввода, которые вам нужны, с использованием конкретных классов для преобразования ввода (A на клавиатуре или RTrigger на Xbox) в действие ввода в вашей игре (нажмите кнопку пуансона, нажмите кнопку перехода, Движение в направлении X и т. Д.).
В C# это можно сделать относительно легко. Создайте класс/struct, чтобы стать объектом возврата конверсии. В моем случае я сделал боевую платформу игры с действиями и движением с управлением камерой, я называю это InputState
:
public class InputState
{
public struct Axis
{
public float X;
public float Y;
public float XNorm
{
get{ return Math.Abs(X); }
}
public float YNorm
{
get{ return Math.Abs(Y); }
}
}
public struct ActionStates
{
public bool Jump;
public bool Punch;
public bool Kick;
public bool Special;
public bool Grab;
public bool Guard;
}
public Axis MovementAxis;
public Axis CameraAxis;
public ActionStates Actions;
}
Вы можете создать абстрактный InputConverter
класс, который принимает входной сигнал некоторого типа и возвращает этот InputState
класс:
public abstract class InputConverter
{
public abstract InputState Convert();
}
Вы можете расширить этот класс в другие, например, в Unity3D я использую этот класс, который я создал, чтобы сделать вход с контроллером XBox преобразования в InputState
класс выше. При инициализации требуется идентификатор игрока для получения правильного контроллера. Наиболее импорт часть здесь является public override InputState Convert
, который возвращает ваши игры InputState
объект:
using XInputDotNetPure;
public class XInputConverter : InputConverter
{
bool playerIndexSet = false;
PlayerIndex playerIndex;
GamePadState gamePadState;
GamePadState prevState;
public XInputConverter(int playerSlot)
{
VerifyControllerConnected(playerSlot);
}
private void VerifyControllerConnected(int playerSlot)
{
// Find a PlayerIndex, for a single player game
if (!playerIndexSet || !prevState.IsConnected)
{
PlayerIndex testPlayerIndex = (PlayerIndex)playerSlot - 1;
GamePadState testState = GamePad.GetState(testPlayerIndex);
if (testState.IsConnected)
{
//Debug.Log (string.Format ("GamePad found {0}", testPlayerIndex));
playerIndex = testPlayerIndex;
playerIndexSet = true;
} else
{
throw new Exception(string.Format("GamePad {0} has been unplugged or is not connecting properly", testPlayerIndex));
}
}
}
public override InputState Convert()
{
InputState outputState = new InputState();
gamePadState = GamePad.GetState(playerIndex);
//Actions
outputState.Actions.Jump = gamePadState.Buttons.Y == ButtonState.Pressed;
//Offense
outputState.Actions.Punch = gamePadState.Buttons.X == ButtonState.Pressed;
outputState.Actions.Kick = gamePadState.Buttons.A == ButtonState.Pressed;
outputState.Actions.Special = gamePadState.Buttons.B == ButtonState.Pressed;
//Defense
outputState.Actions.Grab = gamePadState.Buttons.LeftShoulder == ButtonState.Pressed || gamePadState.Buttons.RightShoulder == ButtonState.Pressed;
outputState.Actions.Guard = gamePadState.Triggers.Left > 0 || gamePadState.Triggers.Right > 0;
//Movement from DPad
short xAxis = 0;
short yAxis = 0;
//Determine if Dpad has any input
if (gamePadState.DPad.Right == ButtonState.Pressed)
xAxis += 1;
if (gamePadState.DPad.Left == ButtonState.Pressed)
xAxis -= 1;
if (gamePadState.DPad.Up == ButtonState.Pressed)
yAxis += 1;
if (gamePadState.DPad.Down == ButtonState.Pressed)
yAxis -= 1;
//Set the movement to either the Thumsticks or the DPad
outputState.MovementAxis.X = xAxis == 0 ? gamePadState.ThumbSticks.Left.X : xAxis;
outputState.MovementAxis.Y = yAxis == 0 ? gamePadState.ThumbSticks.Left.Y : yAxis;
//Camera
outputState.CameraAxis.X = gamePadState.ThumbSticks.Right.X;
outputState.CameraAxis.X = gamePadState.ThumbSticks.Right.Y;
return outputState;
}
}
Используя этот класс, вы можете специально использовать кнопки, которые вы хотите для действий, которые необходимо и сделать это с любыми входами вы выбираете. Здесь есть единство клавиатура преобразователь:
using UnityEngine;
public class UnityKeyboardInputConverter : InputConverter
{
public override InputState Convert()
{
InputState state = new InputState();
//Actions
state.Actions.Jump = Input.GetKey(KeyCode.Space);
//Offense
state.Actions.Punch = Input.GetKey(KeyCode.J);
state.Actions.Kick = Input.GetKey(KeyCode.K);
state.Actions.Special = Input.GetKey(KeyCode.L);
//Defense
state.Actions.Grab = Input.GetKey(KeyCode.RightShift);
state.Actions.Guard = Input.GetKey(KeyCode.LeftShift);
//Movement
state.MovementAxis.X = Input.GetAxisRaw("Horizontal");
state.MovementAxis.Y = Input.GetAxisRaw("Vertical");
//Camera
state.CameraAxis.X = Input.GetAxisRaw("Mouse X");
state.CameraAxis.X = Input.GetAxisRaw("Mouse Y");
return state;
}
}
Наконец
В зависимости от выбора игрока, я могу просто инстанцирую входной преобразователь моего выбора, используя перечислитель и использовать InputHandler
класс для вызова обновления и извлечение состояние ввода от соответствующего, без необходимости знать, какой из них он использовал. Это очень важно, как вы хотите, чтобы вызвать только эти входы, когда ваш игровой движок готов и используя настройки выбрали игрок (XBox, клавиатура + мышь, PC геймпад и т.д.):
public class InputHandler
{
//Controller handlers and properties
private int playerNumber;
public enum InputType
{
None = 0,
KeyboardMouse,
XBoxController,
PCGamePad
}
public InputType SelectedInputType = InputType.None;
public InputState CommandState;
//Ambiguous Abstract input converter allows us to assign Xbox or keyboard as input
private InputConverter converter;
public InputHandler(int playerNumber, InputType inputType)
{
SelectedInputType = inputType;
this.playerNumber = playerNumber;
if (playerNumber > 4 || playerNumber < 1)
{
throw new Exception("Player must be set to 1, 2, 3 or 4");
}
//Check type and load converter
switch (SelectedInputType)
{
case InputType.XBoxController:
converter = new XInputConverter(playerNumber);
break;
case InputType.KeyboardMouse
converter = new UnityKeyboardInputConverter();
break;
case InputType.PCGamePad:
converter = new PCGamePadInputConverter(playerNumber);
break;
case InputType.None:
//Do nothing but would be a good idea to handle it in game
}
}
// Update is called once per frame by Unity Update functions
public void InputUpdate()
{
if (converter != null)
{
CommandState = converter.Convert();
}
//Debug if in the Unity editor
#if UNITY_EDITOR
Debug.Log(CommandState.ToString());
#endif
}
}
Надеется, что это помогает.
- 1. Контроллер KODI и Xbox 360
- 2. Xbox 360 вибрирует грохот?
- 3. C++ XInput и контроллер XBOX 360 никогда не подключаются
- 4. XBox 360 Беспроводной контроллер не работает с Коди/XBMC
- 5. OpenSteer на Xbox 360?
- 6. Плагины Dashboard XBox 360
- 7. Программирование Windows/XBOX 360
- 8. Как управлять несколькими устройствами (контроллер XBox 360) LWJGL
- 9. LWJGL - триггеры контроллера Xbox 360
- 10. Xbox 360 для программирования Linux
- 11. Программирование GPU на Xbox 360
- 12. Использование контроллера Xbox 360 в приложении WPF
- 13. Эмуляция контроллера XBox 360 от (не для) от ноутбука
- 14. XBOX 360 XNA подключиться к серверу sql
- 15. Как псевдоним кнопки Xbox 360 на C#?
- 16. Ошибка компоновщика с функцией контроллера xbox 360
- 17. Какая версия .NET доступна для Xbox 360?
- 18. Открытие сборок XNA Xbox 360 в рефлекторе
- 19. SQLite для работы на xbox 360?
- 20. QuickStart для разработки приложений Xbox 360
- 21. Kinect XBOX 360 в витой машине
- 22. Как разработать инди-игру для Xbox 360
- 23. Xbox 360 HTML5/Разработка приложений Javascript
- 24. Возможно ли создание «инди» для Xbox 360?
- 25. Как разбить триггеры на XBOX Один контроллер?
- 26. Xbox Один контроллер Виртуальные ключи
- 27. XNA игра студии Xbox контроллер
- 28. Можно ли «прогнуться» контроллером Xbox 360 с Python?
- 29. Как мне получить вход от контроллера XBox 360?
- 30. Использование kinect xbox 360 и kinect xbox один в одном приложении