2010-11-20 14 views
2

Ich arbeite an meinem ersten Multiplayer-XNA-Spiel, und ich muss in der Lage sein, Eingabe von jedem aktiven GamePad auf einer Xbox360 oder PC zu überprüfen, so dass ich nicht kopieren muss und fügen Sie denselben Code für vier verschiedene Controller ein.Wie man über jedes aktive GamePad in XNA iteriert

Ich habe mir die SignedInGamer und SignedInGamerCollection angesehen, aber keiner von ihnen hat einen Verweis auf die spezifischen GamePad.

Ich möchte etwas wie das Snippet unten tun, aber geändert, damit es in einer Schleife für alle gegenwärtigen Spieler benutzt werden kann, damit ich Eingang für jedes von ihnen erhalten kann. PlayerIndex hat "Eins", "Zwei", "Drei" und "Vier".

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

Antwort

2

Wenn Sie GetState aufrufen, wird die Staatsstruktur die Eigenschaft IsConnected enthalten. Wenn es falsch ist, wird der Controller getrennt. Sie können über die Zustände aller aktiven Controller mit folgendem Code iterieren:

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

Ich habe mir die Freiheit genommen, einen allgemeinen Fehler in Ihrem Code zu beheben. Achten Sie darauf, '<=' und * nicht * '<' in Ihrem Zustand zu verwenden. Die Verwendung des Letzteren wird dazu führen, dass der vierte Controller nicht funktioniert (und dazu führt, dass Ihr Spiel keinen Peer-Review durchführt - dieses Problem ist in http://create.msdn.com/en-US/resources/help/peer_review_evil_checklist aufgeführt). –

+0

@AndrewRussell Danke für die Korrektur! Es stellt sich heraus, es ist ein sehr beliebter Fehler. : D – Athari

Verwandte Themen