[java] contact entre bouton pour un jeu mario

annisseur -  
KX Messages postés 19031 Statut Modérateur -
Bonjour, je fait actuellement un jeu de mario et je bug sur les déplacements. mon mario est un bouton (ainsi que tous les autres objets) et j'arrive a le déplacer correctement avec les flèches mais lorsque je crée des blocs (aussi des boutons crées a l'aide d'un tableau) et que je veux qu'il s'arrête s'il arrive a leur contact il commence a faire des sauts a travers mon écran... est-ce-que quelqu'un peut m'aider?
voila le bout de code qui plante (le programme complet fait 30 pages donc je vais pas le mettre en entier)


case KeyEvent.VK_LEFT:
		
for (i=0; i<bloc.length; i++)	
if ((marioX + w >= bX[i])    
   //bX[i] et marioX sont des coordonnées et w  et h les tailles du bouton mario

&!(marioX > bX[i] + wB)
&(marioY + h >= bY[i])
&!(marioY > bY[i] + hB))	
break;

else {						
if (marioX<1) //pour savoir s'il touche le bord gauche de l'écran
break;

else {

mario.setLocation(p.x-5, p.y);   //ce code-ci fonctionne très bien s'il est tout seul
marioX = mario.getX();
contact();
p = mario.getLocation();
marioDroite = false;
}

break;
								


1 réponse

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    On ne fait pas des conjonctions booléennes avec & mais avec &&
    De plus tes négations sont inutiles si tu échanges le sens de tes inégalités.

    if ((marioX + w >= bX[i]) && (marioX <= bX[i] + wB)
     && (marioY + h >= bY[i]) && (marioY <= bY[i] + hB))
        break;
    0
    1. annisseur
       
      ça ne change rien il continue a faire des sauts qu'il n'est pas sensé faire (si tu veux je peux t'envoyer mon programme par mail pour que tu voie de toi meme)
      0
    2. KX Messages postés 19031 Statut Modérateur 3 020
       
      Avec aussi peu d'information, il y avait peu de chance que ça corrige tout, mais il y a un autre problème que je n'avais pas vu tout à l'heure à cause de ton indentation inexistante, c'est l'imbrication de tes switch/for/if et l'utilisation de tes break... car il y a le break de la boucle for, et le break du switch.

      De plus, quand tu fais ce break, est-ce que c'est parce que tu as une erreur ?
      Parce que dans ce cas ce ne sont pas des ET qu'il te faut, mais des OU...

      case KeyEvent.VK_LEFT:
      
      for (i=0; i<bloc.length; i++)
      {
          if (marioX<1 || (marioX + w >= bX[i]) || (marioX <= bX[i] + wB) || (marioY + h >= bY[i]) || (marioY <= bY[i] + hB))
          {
              break; // le break du for
          }
          else
          {
              mario.setLocation(p.x-5, p.y);
              marioX = mario.getX();
              contact();
              p = mario.getLocation();
              marioDroite = false;
          }
      }
      
      break; // le break du switch
      0
    3. annisseur
       
      non je break si le bouton de mario entre en contact avec l'autre de maniere a ce qu'il ne se déplace plus. Comment est-ce-que je fais pour que le premier break soit aussi pour le switch?
      0
    4. KX Messages postés 19031 Statut Modérateur 3 020
       
      Ici ça ne sert pas à grand chose de faire un break direct du switch, car le break du for va te faire arriver sur ligne où il y a le break du switch, donc ça va revenir au même.

      Mais pour info, on peut mettre des étiquettes aux for, while et switch :

      s: switch(n)
         {
             case 1:
      f:         for (int i=0; i<5; i++)
                 {
                      break;    // par défaut, break du for
                      break f;  // break de "f", le for
                      break s;  // break de "s", le switch
                 }
         }
      0
    5. annisseur
       
      je peux t'envoyer mon programme comme ça tu peux tester toi meme?
      ça serait cool
      parceque la ça a rien changé
      0