2010-11-20 2 views
2

Je travaille sur mon premier jeu XNA multijoueur, et je dois pouvoir vérifier les entrées de chaque GamePad actif sur une Xbox360 ou un PC pour ne pas avoir à copier et collez le même code pour quatre contrôleurs différents.Comment parcourir sur chaque GamePad actif dans XNA

J'ai regardé le SignedInGamer, et SignedInGamerCollection, mais aucun d'entre eux ont une référence au GamePad spécifique. Je voudrais faire quelque chose comme l'extrait ci-dessous, mais modifié afin qu'il puisse être utilisé dans une boucle pour tous les joueurs actuels afin que je puisse obtenir des informations pour chacun d'entre eux. PlayerIndex a "Un", "Deux", "Trois" et "Quatre".

GamePadState gS = GamePad.GetState(Microsoft.Xna.Framework.PlayerIndex.One); 

Répondre

2

Lorsque vous appelez GetState, la structure étatique contiendra la propriété IsConnected. Si c'est faux, le contrôleur est déconnecté. Vous pouvez itérer sur les états de tous les contrôleurs actifs en utilisant le code suivant:

for (PlayerIndex i = PlayerIndex.One; i <= PlayerIndex.Four; i++) { 
    GamePadState state = GamePad.GetState(i); 
    if (state.IsConnected) { 
     // TODO: Process state 
    } 
} 
+2

J'ai pris la liberté de corriger un bug courant dans votre code. Prenez soin d'utiliser <= 'et * not *' <'dans votre condition. L'utilisation de ce dernier entraînera l'échec du quatrième contrôleur (et entraînera l'échec de l'examen par les pairs de votre jeu. Ce problème est répertorié dans http://create.msdn.com/en-US/resources/help/peer_review_evil_checklist). –

+0

@AndrewRussell Merci pour la correction! Il s'avère que c'est une erreur très populaire. :RÉ – Athari