[java] contact entre bouton pour un jeu mario

Fermé
annisseur - 15 nov. 2012 à 18:12
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 16 nov. 2012 à 18:48
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;
								




A voir également:

1 réponse

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
15 nov. 2012 à 18:21
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
ç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
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
15 nov. 2012 à 18:52
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
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
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
Modifié par KX le 15/11/2012 à 21:35
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
je peux t'envoyer mon programme comme ça tu peux tester toi meme?
ça serait cool
parceque la ça a rien changé
0