Étape 6: C# Application filetage et la XBox 360 contrôleur entrée
Le premier bit du logiciel que j’ai écrit pour ce projet a été pour la manette XBox 360 (vous avez peut-être remarqué que le nom du projet Visual Studio original a menées à la fin!). Vous y trouverez le code du contrôleur XBox dans la première partie du fichier « Form1.cs ». Comme mentionné dans l’étape précédente, ce code ne fonctionne que si le wrapper de dotnet Xinput a été configuré (i.e. « XInputDotNetPure.dll » a été ajouté comme une référence dans le projet c#, et « XInputInterface.dll » est dans le même dossier que le fichier .exe).
Le code fonctionne de façon répétée du scrutin le contrôleur pour récupérer l’état des boutons et des commandes analogiques. En raison de ce vote, j’ai réalisé que le programme aurait besoin de plusieurs threads, afin de travailler du tout. C’était un peu un défi, comme je n’avais pas écrit en fait une application multi-thread avant celui-ci. Après avoir regardé quelques exemples et didacticiels, j’ai décidé qu’il y aurait un thread d’application principal pour l’interface utilisateur graphique (GUI), un thread séparé pour la manipulation de la manette XBox 360 et plusieurs threads supplémentaires pour d’autres choses. Plusieurs threads permettent toutes ces choses de travailler en parallèle, sans aucun lag perceptible dans l’interface GUI.
Dans le fil de contrôleur Xbox, l’état du contrôleur est interrogé à environ 50Hz, donc il a toujours très courante. Ces données de contrôleur sont également reprises sur l’interface graphique, et les touches sont surlignés en orange. Pour ce faire, inter-threads données transferts étaient nécessaires. J’ai utilisé le concept de « délégués » pour permettre aux threads de "affecter" les uns les autres. Vous remarquerez également un certain nombre de variables « shared_... » qui sont utilisés à travers plusieurs threads.
Cette disposition du code a également un compteur qui assure le suivi du contrôleur "frames". Dans le cadre de mon code, les cadres se reporter à la lecture de l’état du contrôleur. Les compteurs « samplecount » et « oldsamplecount » sont utilisés pour que les pressions sur la touche longue sont correctement prises en compte. À titre d’exemple, j’ai affecté certains boutons numériques afin qu’une simple pression sur une fonction, et la presse suivante désactive cette fonction. Si une pression prolongée n’est pas gérée correctement, le programme bascule qui fonctionnent sous et hors tension en permanence. Le code gère correctement une pression longue comme une simple pression en comparant la valeur d’oldsamplecount contre samplecount. Si la différence entre les deux variables est trop petite, il est détecté comme une pression longue.