J'essaie de permettre au joueur d'appuyer sur n'importe quel bouton pour continuer à partir de la page principale. J'ai pu le faire en faisant une liste de boutons et en les parcourant et en vérifiant que l'un d'entre eux était en panne; cependant, j'ai l'impression que ce code est un peu moche et je me demande s'il existe un moyen plus simple de le faire auquel je ne pense tout simplement pas?
Voici à quoi ressemble mon code maintenant:
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;
}
}
Réponses:
Cela devrait faire l'affaire. À la fin de chaque boucle de mise à jour, enregistrez l'état de
previousGamePadState
. Ensuite, vous pouvez les comparer. C'est un moyen rapide de détecter les changements. Pas besoin de boucler.GamePadState.PacketNumber :
Vous pouvez utiliser PacketNumber pour déterminer si l'état d'entrée a changé. Si la valeur de PacketNumber reste la même entre deux appels séquentiels à GetState, il n'y a eu aucun changement d'entrée.
EDIT: changé en méthode. Il n'est pas garanti de fonctionner correctement, mais devrait fonctionner. De plus, parce que cela détecte vraiment les changements d'entrée, donc si l'utilisateur relâche le bouton, cela se voit également. J'ai également ajouté
if
pour détecter le mouvement de la baguette, afin que vous puissiez au moins les ignorer.J'espère que cela vous aidera. Faites-le moi savoir, si cela ne correspond pas à vos besoins, je suis sûr que nous pouvons régler cela.
Comment: détecter si un bouton de contrôleur a été enfoncé dans cette propriété FramePadState.PacketNumber
la source
GamePadState
etenum Buttons
, qui est plus proche du contexte que l'OP semble utiliser.Si cela ne vous dérange pas l'utilisation de Reflection, vous pouvez utiliser quelque chose comme ça (peut-être même exactement cela):
la source
Vous pouvez manuellement construire un vide
GamePadState
, puis le vérifier pour (in) l'égalité avec le réel actuel, que vous récupérez en appelantGamePad.GetState
.la source
Equals
est différent; il compare deux références pour être la même instance. MaisGamePadState
surcharge l'opérateur == pour comparer leurs valeurs, auxquelles j'ai lié dans ma réponse (op_Equality
).Étant donné que les boutons sont une énumération, vous pouvez utiliser la méthode Enum.GetValues comme ceci:
la source