Switch - Gamebuino

Général

IceCrew

il y a 5 ans

switch (variable()) {

    case Valeur1 :
      Liste d'instructions;

    break;
 }

Bonjour,

je suis en train de développer un petit jeu très basique de plateforme mais un petit truc m'embête : lorsque je maintient la croix directionnelles appuyée, les boutons sont bloqués. (imaginons : quand je cours à droite avec la croix, je ne peut pas sauter avec le bouton B).

J'ai pensé que c'était un problème avec la structure de mon code (j'utilise un "if" et une suite de "else if") alors j'ai voulu utiliser les switch. Hors je n'ai aucune idée de quoi mettre dedans (à la place de la variable, pour la valeur1 je pense que ça serait (gb.buttons.repeat(BUTTON_LEFT, 0))

Merci d'avance pour vos réponses !

jicehel

NEW il y a 5 ans

En fait tu as raison plus ou moins: je m'explique dans les 2 cas tu fais l'un sinon l'autre.

Toi ce qu'il faut dans ton cas c'est séparer les cas. Mettre 2 if séparés l'un de l'autre.

Actuellement tu lui dis si A est appuyé traite A sinon traite B.

Tu peux aussi le faire comme ça mais dans ce cas tu dois faire 

  si A est appuyé alors 

       si B est appuyé traite les boutons A et B sont appuyé sinon traite A est appuyé

 sinon si B est appuyé alors traite B est appuyé


Si tu ne traite que l'interaction de ces 2 boutons ça reste simple

Tu vois le principe, tu peux l'écrire de différentes façons selon la logique de ton jeu

clement

NEW il y a 5 ans

Juste pour completer @jicehel , ce qui dit est OK mais sont algo n est pas top .


tu fait un 

if(btn_A) { 
   // quelques Action
   // si je passe ici je ne passe pas dans le else
   // cette condition est prioritaire sur la suivante
} else if(btn_b) {
   // dautre action que j aimerais pouvoir faire en meme temp que celle de de BTN_A
}


tu as remplacer ces if else if  par un switch case  qui fait exactement la meme chose.


quand tu passe dans le premier if ou dans la premiere case tu ne passe pas dans les autres 


la solution est de rester avec des if  et d'enlever les else 


if(btn_A) { 
   // quelques Action 
} 
 // pas de else toute les if vont etre tester
if(btn_b) {
   // dautre action que j aimerais pouvoir faire en meme temp que celle de de BTN_A
   // sans le else cela marche merveilleusement bien HouHou
}



jicehel

NEW il y a 5 ans

Juste pour compléter @clement, la solution dans ton cas (celle que j'ai essayé d'expliqué dans mon message précédent) avec un algo plus propre que dans le précédent message c'est: 

if(btn_A && btn_b) {   
     // Actions à faire si A & B sont appuyés
} else if(btn_a) {   
  // Les actions a faire quand le bouton A seulement est appuyé 
} else if(btn_b) {   
  // Les actions a faire quand le bouton B seulement est appuyé 
}

clement

NEW il y a 5 ans

ok je comprend mieux ton algo jicehel.

les use case sont different. Dans ton cas on fait 3 action different, mais uniquement 1 a la fois 

dans mon cas on a deux action differente mais qui peuvent etre simultané


Tout dépend du besoin ;)



jicehel

NEW il y a 5 ans

Oui, je crois que c'est ce qu'il voulait faire  ;) Maintenant de toutes façons, il a le choix des solution

IceCrew

NEW il y a 5 ans

Merci beaucoup pour vos réponses, pour ma part j'ai fait ça :

if(gb.buttons.repeat(BUTTON_LEFT,0))
   {
    if(gb.buttons.repeat(BUTTON_B,0))
    {
      posX-=PAS;
      posY-=PAS;
    }
    else
      posX-=PAS;
   }

c'est pas très beau mais ça marche haha

jicehel

NEW il y a 5 ans

Non non, c'est très bien