Je dois pouvoir déterminer la durée pendant laquelle une touche a été maintenue enfoncée avec une grande précision. Par exemple, si les touches sont tapées très rapidement, cela peut signaler une heure inférieure à l'heure de chaque trame de mise à jour.
8
Réponses:
Vous pouvez capturer l'entrée en utilisant la classe System.Windows.Forms.NativeWindow. Vous recevrez une notification lorsqu'un événement d'entrée se produit. De cette façon, vous serez informé le plus rapidement possible dès qu'il se produit, vous permettant d'enregistrer l'heure avec une précision plus élevée. Cela devient un peu désordonné (code natif / dangereux), mais cela fonctionne.
Je pense que cela ne fonctionne que sur Windows, mais je pense que c'est la plate-forme que vous ciblez (pas besoin de cela sur Xbox et WP7).
Voici un bon exemple (du framework nuclex): WindowInputCapturer (note: ce code a peut-être été mis à jour récemment et je ne l'ai pas codé)
Modifier: Cela vous permet également d'obtenir le code de caractère de la touche pressée. Cela pourrait être utile pour la saisie de texte (en particulier des choses comme les caractères latins), je ne sais pas pourquoi vous auriez besoin d'une saisie avec une telle précision, mais ce serait un bon moyen de le faire à mon avis.
la source
XNA est un cadre basé sur une boucle, pas un cadre basé sur des événements. Si vous avez besoin de l'heure exacte à laquelle un événement s'est produit, envisagez un projet winforms (un projet basé sur un événement) et connectez XNA à un contrôle si nécessaire pour le rendu.
la source
Stockez l'état de la clé dans une variable et comparez-le dans la boucle suivante aux états de clé actuels. Créez un
DateTime
objet pour maintenir le début et vous pouvez comparer avecDateTime.Now
quand l'état clé précédent ne correspond pas.Exemple très simple de ce que je veux dire:
la source
Je ne suis au courant d'aucune façon officielle de le faire, vous pouvez exécuter un deuxième thread dans une boucle très serrée juste pour vérifier l'entrée et l'envoyer à un tampon circulaire suffisamment grand pour nécessiter très peu de synchronisation entre les threads.
(Stockez une sorte de nombre croissant dans chaque emplacement du tampon et mettez à jour APRÈS que le thread a écrit toutes les données, puis continuez à lire les emplacements avec les données du tampon jusqu'à ce que le nombre diminue (n'oubliez pas de vérifier les nombres débordants!))
la source
Si vous effectuez une mise à jour trente fois par seconde, un humain ne pourra pas appuyer sur les touches plus rapidement que vous ne pourrez échantillonner l'état du clavier. Si vous mettez à jour plus lentement qu'un humain ne peut taper, vous aurez peut-être besoin d'un thread pour le rendu des graphiques et d'un autre thread pour lire et répondre au clavier / souris.
Mais, si vous effectuez une mise à jour plus lentement qu'un humain ne peut saisir, vous ne pouvez pas non plus fournir de retour visuel pour chaque pression de touche. Cela n'a pas d'importance si l'idée est d'afficher des commentaires agrégés, tels que le temps moyen entre les pressions de touches.
la source