Boucle while fais crash le jeu
Fermé
alexp23
Messages postés
88
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
15 avril 2014
-
23 févr. 2014 à 18:10
alexp23 Messages postés 88 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 15 avril 2014 - 23 févr. 2014 à 19:05
alexp23 Messages postés 88 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 15 avril 2014 - 23 févr. 2014 à 19:05
A voir également:
- Boucle while fais crash le jeu
- 94 jeu - Télécharger - Puzzle & Réflexion
- Jeu zuma - Télécharger - Jeux vidéo
- Jeu 94 degrés - Télécharger - Divers Jeux
- Crash windows - Guide
- Logo jeu - Télécharger - Jeux vidéo
2 réponses
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
23 févr. 2014 à 18:27
23 févr. 2014 à 18:27
MarioDir == "bas"
Il ne faut pas comparer deux objets avec == mais avec la méthode equals.
Remarque, une fois que le bouton bas aura été détecté une fois, avec ta boucle while (true) Mario descendra toujours sans s'arrêter, même si le bouton bas est relâché, je pense que c'est une erreur.
public void Move() { if (MarioDir.equals("bas")) { this.y += 1; try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } }
alexp23
Messages postés
88
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
15 avril 2014
4
23 févr. 2014 à 18:36
23 févr. 2014 à 18:36
Merci mais le code que tu m'as donner donne le même résultat que :
Sauf qu'il à 100 millis de décalage, ce code aussi le fais crash :
et même, il bouge même pas, il crash directe ...
if (MarioDir == "bas"){ this.x += 1; }
Sauf qu'il à 100 millis de décalage, ce code aussi le fais crash :
if (MarioDir == "bas"){ while ((MarioDir == "bas")){ this.y += 1; try { Thread.sleep(100); } catch (InterruptedException e) {e.printStackTrace();} } }
et même, il bouge même pas, il crash directe ...
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 23/02/2014 à 18:47
Modifié par KX le 23/02/2014 à 18:47
Déjà, arrête avec =="bas" c'est faux !
Le résultat peut être true dans un unique cas très particulier, mais en général l'égalité donnera false, quand bien même la valeur serait "bas" ... donc utilises .equals("bas")
Le résultat peut être true dans un unique cas très particulier, mais en général l'égalité donnera false, quand bien même la valeur serait "bas" ... donc utilises .equals("bas")
alexp23
Messages postés
88
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
15 avril 2014
4
Modifié par alexp23 le 23/02/2014 à 18:55
Modifié par alexp23 le 23/02/2014 à 18:55
ok, je veux bien utilisé equals() mais le résultat est le même ... Dans tout les cas ce code fais complètement crash la fenêtré :
if (MarioDir.equals("bas")){ while (MarioDir.equals("bas")){ this.y += 1; try { Thread.sleep(100); } catch (InterruptedException e) {e.printStackTrace();} } }
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
23 févr. 2014 à 18:58
23 févr. 2014 à 18:58
Il faudrait voir comment cette méthode s'insert dans le reste du code, mais j'ai l'impression que c'est du séquentiel, c'est à dire que tant que cela boucle, avec notamment le temps de pause, le reste du programme ne fait rien. Or normalement il faudrait gérer plusieurs threads de manière à ce que la fenêtre puisse au moins se rafraîchir régulièrement, or si ton programme est fait comme je le pense, la fenêtre ne pourra pas être redessinée avant la fin de tous les traitements et ça freeze. Mais ce n'est avec un petit morceau de code que je pourrais t'aider, c'est toute la gestion d'action qu'il faut revoir.
alexp23
Messages postés
88
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
15 avril 2014
4
23 févr. 2014 à 19:05
23 févr. 2014 à 19:05
D'accord merci, ça semble logique : je vais essayer de voir tout ça par moi même à tête reposé. Tout le code fais environ 1000 lignes, je vais t'épargner ça :)
Merci pour ton aide.
ps : Je dois fermer la fenêtre avec l'invité de commande tellement que ça frizze ...
Merci pour ton aide.
ps : Je dois fermer la fenêtre avec l'invité de commande tellement que ça frizze ...