2017-08-14 1 views
0

Ce que je suis en train d'accomplir:Comment faire pour basculer l'événement de clic en utilisant SDL?

  • Lorsque l'utilisateur clique dans le jeu, la tuile que l'utilisateur clique sur affiche une bordure
  • Si l'utilisateur clique à nouveau (partout) la frontière disparaît

Ce que j'ai jusqu'à présent:

  • Lorsque l'utilisateur clique dans le jeu, la bordure apparaît autour de la tuile sélectionnée

Ce que je ne peux pas sembler comprendre (je l'ai tout essayé je peux penser)

  • Comment obtenir la frontière pour aller après un autre clic

A propos de mon code :

J'ai une classe MouseInput qui vérifie si le bouton gauche de la souris a été enfoncé. J'utilise des variables booléennes pour essayer de basculer une variable qui affichera la bordure de la tuile (si on clique dessus) ou ne pas afficher la bordure (si on clique à nouveau). Le code que je possède permettra à la bordure de s'afficher mais je ne peux pas l'obtenir pour un autre clic. Je ne peux pas vraiment montrer toutes les choses que j'ai essayées (essayé ceci pendant 2 jours et ne me souviens pas de ce que j'ai fait lol). Ceci est un Sumary de mon code à ce jour:

bool toggle; // Set to false in constructor 
bool justPressed; // Set to false in constructor 
bool justReleased; // Set to false in constructor 

void Mouse::Update() // My custom mouse class Updating function (updates position, etc) 
{ 
    input.Update(); // My MouseInput class Updating function. 

    if (input.Left() && !toggle) // input.Left() checks if left mouse was pressed. True if it is pressed down, and false if it's not pressed. 
    { 
     // So we have pressed the mouse 
     justPressed = true; 
     justReleased = false; 
     printf("UGH FML"); 
    } 
    else if (!input.Left()) // So the mouse has been released (or hasn't clicked yet) 
    { 
     justPressed = false; 
     justReleased = true; 
    } 

    if (justPressed) 
    { 
     toggle = true; 
    } 
} 

J'ai tout essayé, je peux penser à faire basculer de nouveau à false. Et maintenant mon cerveau me fait mal. Il y a probablement une solution vraiment simple mais je ne peux pas m'en sortir. Suggestions?

+2

Quelque chose comme 'si (événement) border = frontière;' – sp2danny

Répondre

0

Je pense que ce que vous cherchez est le bloc de code suivant:

if (input.Left() && toggle) { //mouse is pressed and toggle is already true 
    toggle = false; 
} 

Vous devez également supprimer le bloc de code suivant, car il mettra bascule à true si vous appuyez sur, quel que soit si bascule était déjà vrai:

if (justPressed) { 
    toggle = true; 
} 

au lieu de cela, vous pouvez régler la bascule directement dans le cas correspondant au clic initial:

if (input.Left() && !toggle) { //mouse is pressed and toggle is false 
    toggle = true; 
} 

Comme mentionné par sp2danny, ainsi que les deux blocs peuvent être simplifiés:

if (input.Left()) { //mouse is pressed 
    toggle = !toggle; 
}