¿Cómo representa XNA KeyboardState todos los keyboards?

Ya entiendo cómo trabajar con Keyboard y KeyboardState , pero al depurar, eché un vistazo a los miembros no públicos del KeyboardState través del depurador VS. Esperaba ver una gran list de valores, pero solo vi 8 uint a nivel estático y otros 8 uint por instancia:

 Non-Public members (static) stateMask0 uint 976757505 stateMask1 uint 67108863 stateMask2 uint 3221225470 stateMask3 uint 4294967295 stateMask4 uint 196863 stateMask5 uint 4244635647 stateMask6 uint 4160752641 stateMask7 uint 1876688932 Non-Public members (instance) currentState0 uint 0 currentState1 uint 0 currentState2 uint 0 currentState3 uint 1048576 currentState4 uint 0 currentState5 uint 0 currentState6 uint 0 currentState7 uint 0 

Hay 32 bits por palabra , por lo que tener 8 de ellos actúa esencialmente como un campo de 256 valores booleans, que se corresponde libremente con el tipo de letra Keys , así que supongo que los valores estáticos actúan como una forma de comprobar qué botones están presentes en un dispositivo. Sin embargo, XNA admite hasta 4 keyboards, por lo que no estoy seguro de cómo se traduce esto en un estado de button, ni cómo puede diferenciar entre keyboards diferentes de esta manera.

XNA solo es compatible con un keyboard . Admite hasta cuatro chatpads , que se ven exactamente como los keyboards en términos del estado que rastrean (tenga en count las sutiles diferencias en las sobrecargas de Keyboard.GetState ).

De todos modos, el object KeyboardState simplemente refleja el estado de un keyboard o de un chatpad. Por sí solo, no sabe ni le importa si representa el estado del keyboard o el estado del chatpad de un jugador en particular, o qué.

Cuando llama a la sobrecarga de GetState que toma el índice de un jugador , la interfaz del Keyboard puede matar al KeyboardState con los bits apropiados para el jugador especificado en ese punto, por lo que KeyboardState solo necesita suficiente almacenamiento para representar un solo estado del keyboard.