Я пытаюсь позволить игроку нажать любую кнопку, чтобы продолжить с главной страницы. Я смог сделать это, составив список кнопок, просматривая их и проверяя, не работает ли одна из них; Тем не менее, я чувствую, что этот код выглядит некрасиво, и мне интересно, есть ли более простой способ сделать это, о котором я просто не думаю?
Вот как выглядит мой код сейчас:
if (GamePad.GetState(PlayerIndex.One).IsConnected)
{
var buttonList = new List<Buttons>()
{
{Buttons.A},
{Buttons.B},
{Buttons.Y},
{Buttons.X},
{Buttons.Start},
{Buttons.Back},
{Buttons.RightShoulder},
{Buttons.LeftShoulder},
{Buttons.RightTrigger},
{Buttons.LeftTrigger}
};
foreach (var button in buttonList)
{
if (GamePad.GetState(PlayerIndex.One).IsButtonDown(button))
ExitMainMenu= true;
}
}
Ответы:
Это должно сделать работу. В конце каждого цикла обновления сохраняйте состояние
previousGamePadState
. Тогда вы можете сравнить их. Это быстрый способ обнаружить изменения. Не надо зацикливаться.GamePadState.PacketNumber :
Вы можете использовать PacketNumber, чтобы определить, изменилось ли состояние ввода. Если значение PacketNumber остается неизменным между двумя последовательными вызовами GetState, то входные данные не изменились.
РЕДАКТИРОВАТЬ: Изменено на метод. Это не гарантировано, чтобы работать правильно, как есть, но должно работать. Кроме того, потому что это действительно обнаруживает изменения в вводе, поэтому, если пользователь отпускает кнопку, это видно и с этим. Я также добавил,
if
чтобы обнаружить движение большого пальца, чтобы вы могли игнорировать их по крайней мере.Надеюсь, это поможет вам. Дайте мне знать, если это не соответствует вашим потребностям, я уверен, что мы можем решить это.
Как: определить, была ли нажата кнопка контроллера в этом кадре GamePadState.PacketNumber Свойство
источник
GamePadState
иenum Buttons
, который ближе к контексту, который использует OP.Если вы не возражаете против использования Reflection, вы можете использовать что-то вроде этого (возможно, даже это точно):
источник
Вы можете вручную создать пустой
GamePadState
, а затем проверить его на (в) равенство с текущим реальным, который вы вызываете, вызываяGamePad.GetState
.источник
Equals
отличается от других; он сравнивает две ссылки как один и тот же экземпляр. НоGamePadState
перегружает ли оператор == для сравнения их значений, на которые я ссылался в своем ответе (op_Equality
).Поскольку кнопки - это перечисление, вы можете использовать метод Enum.GetValues, например:
источник