2011-05-17 2 views
2

J'ai une interruption qui sur la touche du clavier me donne la clé de coordination. Lorsque le verrouillage numérique est activé, les touches apparaissent comme Numpad1, Numpad2, etc. Lorsque le verrouillage numérique est désactivé, les touches du pavé numérique se transforment en End, Left, Right, Up, PageLock ... Je ne peux pas avoir ce problème parce que j'ai besoin pour garder ces touches (gauche, droite ..) comme les touches fléchées réelles. Id plutôt que l'entrée ne soit pas affectée par le verrouillage numérique du tout. Cependant, je ne peux pas sembler atténuer cela car je reçois l'entrée de XNA directement. Quelqu'un d'autre peut-il confirmer que cela se produit dans XNA 3.1 sur VS 2008?XNA Verrouillage numérique affecte l'entrée

Répondre

0

Vous pouvez définir 2 clés pour chaque action de votre partie. Par exemple, au lieu de Keys.Left pour se déplacer vers la gauche, avoir une autre clé allouée pour cela (Numpad4).

Dans votre entrée code de vérification, vous simplement vérifier si l'une de ces 2 touches sont enfoncées:

Par exemple:

if (IsKeyPressed(Keys.Numpad4) || IsKeyPressed(Keys.Left) 
{ 
    // Do some action. 
} 

Off, vous pouvez bien sûr créer une méthode qui accepte 2 clés et effectue cela en interne, sans avoir besoin d'écrire le code à chaque fois.

+1

si je devais faire quelque chose de différent avec les touches; par exemple. mouvement avec les touches directionnelles mais, quelque chose d'autre w/les touches du pavé numérique? Cette solution ne fonctionnerait pas alors. –

+0

Ce n'est pas ce que vous avez demandé à l'origine (ou il n'a pas été compris par moi). Vous avez dit que vous souhaitiez traiter les touches avec NUM ON et NUM OFF de la même manière, d'où ma suggestion. –

+0

Downvoted (uniquement) car il ne répondait pas à la question prévue. La réponse de @Andrew Russell mérite d'être au top au lieu de celui-ci (et ce n'est que lorsque j'ai voté). – Xonatron

2

XNA utilise en interne la fonction win32 GetKeyboardState pour déterminer l'état du clavier. Cette fonction ne peut pas faire la différence entre le pavé numérique, les touches fléchées et le groupe d'insertion.

Apparemment, vous pouvez différencier les clés en utilisant le WM_KEYDOWN message (et ses amis).

Je vais laisser l'interop requis pour obtenir des messages Win32 dans une application XNA, et comment vérifier les données pour le message, comme un exercice.

(Personnellement, je recommande de modifier simplement votre système de contrôle. Ou tout simplement en observant l'état de verrouillage numérique de l'utilisateur. Il est en général une mauvaise idée de prendre en charge la fonctionnalité de quelque chose comme la touche de verrouillage numérique!)

+0

Une autre solution pourrait être de forcer NUMLOCK, est-ce possible? – Xonatron

+0

Pour ceux qui sont intéressés, je viens de demander si cela était possible (voir commentaire ci-dessus) dans cette question: http://stackoverflow.com/questions/18138912/can-you-turn-numlock-on-in-xna – Xonatron

0

Je n'ai pas vérifié encore, mais Ryan Rubley de Morphée pour le développement a publié une solution ici qui est la peine de vérifier:

http://xboxforums.create.msdn.com/forums/p/90944/545124.aspx#545124

Voici un travail entièrement solution à utiliser les touches du pavé numérique quel que soit le statut de numlock, et sans allumer la numlock

Créé par Ryan Rubley 9-5-2011

Questions connexes