[java] contact entre bouton pour un jeu mario
annisseur
-
KX Messages postés 19031 Statut Modérateur -
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)
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
-
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;-
-
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 -
-
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 } } -
-