2010-03-07 2 views
4

Cela m'a dérangé récemment - quand j'utilise du code comme ci-dessous pour augmenter la sélection chaque clic de souris: if (m.LeftButton == ButtonState.Pressed) currentSelection++; Puis currentSelection augmente d'une tonne, simplement parce que ce code est dans ma fonction Update() et par conception, exécute chaque image et augmente donc currentSelection. Il n'y a presque aucune chance que vous puissiez cliquer et relâcher assez rapidement pour empêcher que currentSelection en augmente plus d'un.Augmenter le nombre une fois par clic de souris/touche appuyer sur XNA

Maintenant, ma question est de savoir ce que je devrais faire pour le faire chaque fois que je clique une fois sur le bouton de la souris, cela n'augmente la sélection de courant qu'une fois jusqu'à la prochaine fois que je clique de nouveau dessus.

Répondre

6

Vous aurez besoin de comparer l'état actuel de la souris et l'état de la souris de la dernière mise à jour.

Dans votre classe, vous aurez MouseState mouseStateCurrent, mouseStatePrevious; déclaré et donc ça va être quelque chose comme:

mouseStateCurrent = Mouse.GetState(); 

if (mouseStateCurrent.LeftButton == ButtonState.Pressed && 
    mouseStatePrevious.LeftButton == ButtonState.Released) 
{ 
    currentSelection++; 
} 

mouseStatePrevious = mouseStateCurrent; 

Il détecte que le temps précédent vous appuyez sur, puis vous relâchez - alors seulement il est considéré comme comme un clic et il va ajouter à currentSelection.

+0

Je reçois cette erreur bizarre où il est dit que l'opérande && ne peut pas être utilisée avec ButtonState – DMan

+1

Haha, peu importe, j'ai réalisé que c'était que vous utilisiez '=' au lieu de '=='. =) Cela fonctionne, merci. – DMan

+0

J'ai modifié le correctif ==. – Ricket

Questions connexes