Java réinitialiser toutes les variables
Fermé
Dracolos581
Messages postés
58
Date d'inscription
lundi 16 juillet 2012
Statut
Membre
Dernière intervention
25 septembre 2017
-
26 févr. 2015 à 04:05
KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 - 27 févr. 2015 à 13:38
KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 - 27 févr. 2015 à 13:38
A voir également:
- Java réinitialiser toutes les variables
- Reinitialiser pc - Guide
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Reinitialiser pc sans mdp - Guide
- Réinitialiser manette ps4 - Guide
2 réponses
KX
Messages postés
16755
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
26 févr. 2015 à 08:25
26 févr. 2015 à 08:25
Bonjour,
Je ne sais pas trop comment tu en est arrivé à avoir ce besoin - qui est assez spécial - mais ce que tu pourrais faire c'est changer de ClassLoader, c'est ce mécanisme qui gère l'état des classes.
https://fr.wikipedia.org/wiki/Chargeur_de_classe_Java
Je ne sais pas trop comment tu en est arrivé à avoir ce besoin - qui est assez spécial - mais ce que tu pourrais faire c'est changer de ClassLoader, c'est ce mécanisme qui gère l'état des classes.
https://fr.wikipedia.org/wiki/Chargeur_de_classe_Java
Dracolos581
Messages postés
58
Date d'inscription
lundi 16 juillet 2012
Statut
Membre
Dernière intervention
25 septembre 2017
2
26 févr. 2015 à 19:58
26 févr. 2015 à 19:58
Voici donc mon code, je préviens c est long :/
je t es aussi mis la class trace, car j ai un problème avec mon arraylist ( je sais pas si tu peu m aider) elle est la pour stocker une série de point afin que cela forme une ligne a l exécution du code mais elle n affiche qu'un seul point :/ pourtant sa taille augmente bien.
class Jeuxtron :
class moto :
class trace :
je t es aussi mis la class trace, car j ai un problème avec mon arraylist ( je sais pas si tu peu m aider) elle est la pour stocker une série de point afin que cela forme une ligne a l exécution du code mais elle n affiche qu'un seul point :/ pourtant sa taille augmente bien.
class Jeuxtron :
package tron; import javafx.scene.canvas.GraphicsContext; import javafx.scene.input.KeyEvent; import javafx.scene.paint.Color; import java.util.*; public class JeuTron { final static int LONGUEUR= 1024; final static int HAUTEUR = 768; public Trace trace; public Trace trace2; public Moto moto; public Moto moto2; public Rectangle[] murs; public JeuTron(){ this.trace = new Trace(new Vecteur2d(0.0f,-1.0f)); this.moto=new Moto (new Vecteur2d(LONGUEUR/2.0f-20, HAUTEUR/2.0f)); this.moto2=new Moto (new Vecteur2d(LONGUEUR/2.0f+20, HAUTEUR/2.0f)); this.murs=new Rectangle[]{ new Rectangle(new Vecteur2d(LONGUEUR /2.0f, HAUTEUR), LONGUEUR, 10), new Rectangle(new Vecteur2d(LONGUEUR /2.0f, 0), LONGUEUR, 10), new Rectangle(new Vecteur2d(LONGUEUR, HAUTEUR/2.0f), 10, HAUTEUR), new Rectangle(new Vecteur2d(0,HAUTEUR/2.0f), 10, HAUTEUR) }; } public void mettreAJour() { Vecteur2d test= new Vecteur2d (200.0f,300.0f); trace.trace.add(moto.rectangle.position); moto.avancer(7); moto2.avancer(7); if(moto.rectangle.position.x <=5 || moto.rectangle.position.x>= LONGUEUR-5 || moto.rectangle.position.y<=5 || moto.rectangle.position.y>=HAUTEUR-5) moto.colision(LONGUEUR, HAUTEUR); if(moto2.rectangle.position.x <=5 || moto2.rectangle.position.x>= LONGUEUR-5 || moto2.rectangle.position.y<=5 || moto2.rectangle.position.y>=HAUTEUR-5) moto2.colision(LONGUEUR, HAUTEUR); } public void dessinerScene(GraphicsContext peintre) { this.mettreAJour(); peintre.clearRect(0, 0, LONGUEUR, HAUTEUR); peintre.setFill(Color.BLUE); peintre.fillRect(moto.rectangle.gauche(),moto.rectangle.bas(),moto.rectangle.longueur, moto.rectangle.hauteur); peintre.setFill(Color.ORANGE); peintre.fillRect(moto2.rectangle.gauche(),moto2.rectangle.bas(),moto2.rectangle.longueur, moto2.rectangle.hauteur); peintre.setFill(Color.BLACK); for(Rectangle mur :murs){ peintre.fillRect(mur.gauche(),mur.bas(),mur.longueur, mur.hauteur); } peintre.setFill(Color.BLACK); for(Vecteur2d point: trace.trace){ peintre.fillOval(point.x, point.y, 20, 20); } for(int i =0; i<trace2.taille_trace(); i++){ Vecteur2d point = trace2.point(i); peintre.fillOval(point.x, point.y, 20, 20); if(i==10){ } } Vecteur2d pointt = trace.point(5); peintre.fillOval(pointt.x, pointt.y, 20, 20); } public void gererTouche(KeyEvent evt) { String touche = evt.getCharacter(); Vecteur2d app = new Vecteur2d(); switch(touche){ case "a": case "A": moto.tournerD(); app.tournerDe((float)Math.PI/2); break; case "z": case "Z": moto.tournerG(); app.tournerDe((float)Math.PI/2); break; case "r": case "R": moto2.tournerD(); app.tournerDe((float)Math.PI/2); break; case "t": case "T": moto2.tournerG(); app.tournerDe((float)Math.PI/2); break; } } }
class moto :
package tron; import javafx.scene.canvas.GraphicsContext; import javafx.scene.input.KeyEvent; import javafx.scene.paint.Color; import java.util.*; public class JeuTron { final static int LONGUEUR= 1024; final static int HAUTEUR = 768; public Trace trace; public Trace trace2; public Moto moto; public Moto moto2; public Rectangle[] murs; public JeuTron(){ this.trace = new Trace(new Vecteur2d(0.0f,-1.0f)); this.moto=new Moto (new Vecteur2d(LONGUEUR/2.0f-20, HAUTEUR/2.0f)); this.moto2=new Moto (new Vecteur2d(LONGUEUR/2.0f+20, HAUTEUR/2.0f)); this.murs=new Rectangle[]{ new Rectangle(new Vecteur2d(LONGUEUR /2.0f, HAUTEUR), LONGUEUR, 10), new Rectangle(new Vecteur2d(LONGUEUR /2.0f, 0), LONGUEUR, 10), new Rectangle(new Vecteur2d(LONGUEUR, HAUTEUR/2.0f), 10, HAUTEUR), new Rectangle(new Vecteur2d(0,HAUTEUR/2.0f), 10, HAUTEUR) }; } public void mettreAJour() { Vecteur2d test= new Vecteur2d (200.0f,300.0f); trace.trace.add(moto.rectangle.position); trace2.ajouter_trace(test); moto.avancer(7); moto2.avancer(7); if(moto.rectangle.position.x <=5 || moto.rectangle.position.x>= LONGUEUR-5 || moto.rectangle.position.y<=5 || moto.rectangle.position.y>=HAUTEUR-5) moto.colision(LONGUEUR, HAUTEUR); if(moto2.rectangle.position.x <=5 || moto2.rectangle.position.x>= LONGUEUR-5 || moto2.rectangle.position.y<=5 || moto2.rectangle.position.y>=HAUTEUR-5) moto2.colision(LONGUEUR, HAUTEUR); } public void dessinerScene(GraphicsContext peintre) { this.mettreAJour(); peintre.clearRect(0, 0, LONGUEUR, HAUTEUR); peintre.setFill(Color.BLUE); peintre.fillRect(moto.rectangle.gauche(),moto.rectangle.bas(),moto.rectangle.longueur, moto.rectangle.hauteur); peintre.setFill(Color.ORANGE); peintre.fillRect(moto2.rectangle.gauche(),moto2.rectangle.bas(),moto2.rectangle.longueur, moto2.rectangle.hauteur); peintre.setFill(Color.BLACK); for(Rectangle mur :murs){ peintre.fillRect(mur.gauche(),mur.bas(),mur.longueur, mur.hauteur); } peintre.setFill(Color.BLACK); for(Vecteur2d point: trace.trace){ peintre.fillOval(point.x, point.y, 20, 20); } for(int i =0; i<trace2.taille_trace(); i++){ Vecteur2d point = trace2.point(i); peintre.fillOval(point.x, point.y, 20, 20); if(i==10){ peintre.strokeText("x : "+ point.x +"",500, 600); } } Vecteur2d pointt = trace.point(5); peintre.fillOval(pointt.x, pointt.y, 20, 20); peintre.strokeText("Set : "+ trace.taille_trace() +"",500, 500); } public void gererTouche(KeyEvent evt) { String touche = evt.getCharacter(); Vecteur2d app = new Vecteur2d(); switch(touche){ case "a": case "A": moto.tournerD(); app.tournerDe((float)Math.PI/2); break; case "z": case "Z": moto.tournerG(); app.tournerDe((float)Math.PI/2); break; case "r": case "R": moto2.tournerD(); app.tournerDe((float)Math.PI/2); break; case "t": case "T": moto2.tournerG(); app.tournerDe((float)Math.PI/2); break; } } }
class trace :
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package tron; import java.util.*; /** * * @author Benja */ public class Trace { ArrayList<Vecteur2d> trace; public Trace (Vecteur2d position_initial){ this.trace = new ArrayList<Vecteur2d>(); } public void ajouter_trace(Vecteur2d position_actuel){ this.trace.add(position_actuel); } public int taille_trace(){ int taille=trace.size(); return taille; } public Vecteur2d point(int elem){ return trace.get(elem); } }
KX
Messages postés
16755
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
26 févr. 2015 à 20:50
26 févr. 2015 à 20:50
Tu as mis deux fois la classe JeuTron, mais pas la classe Moto.
Et où se trouve ta méthode main ?
Et où se trouve ta méthode main ?
Dracolos581
Messages postés
58
Date d'inscription
lundi 16 juillet 2012
Statut
Membre
Dernière intervention
25 septembre 2017
2
26 févr. 2015 à 21:36
26 févr. 2015 à 21:36
ah oui désoler ^^
class moto:
main :
il n y a pas grand chose mais vu que tu le demande :P
class moto:
package tron; public class Moto { static final float NONANTE_DEGRES = (float)(Math.PI/2.0f); Rectangle rectangle; Vecteur2d direction; public Moto (Vecteur2d position_initial){ this.direction= new Vecteur2d(0.0f, -1.0f); this.rectangle= new Rectangle(position_initial, 10, 30); } public void tournerG(){ this.direction.tournerDe(NONANTE_DEGRES); this.rectangle.tournerDe(); } public void tournerD(){ this.direction.tournerDe(-NONANTE_DEGRES); this.rectangle.tournerDe(); } public void avancer(float vitesse){ this.direction.multiplierPar(vitesse); this.rectangle.deplacerDe(direction); this.direction.normaliser(); } public void colision(float LONGUEUR, float HAUTEUR){ this.rectangle.position.x = LONGUEUR /2.0f; this.rectangle.position.y = HAUTEUR /2.0f; this.rectangle.hauteur=30; this.rectangle.longueur=10; this.direction.x = 0.0f; this.direction.y = -1.0f; } }
main :
il n y a pas grand chose mais vu que tu le demande :P
package tron; import nhpack.SceneBuilderFactory; public class Programme { public static void main(String[] args) { JeuTron jeu = new JeuTron(); SceneBuilderFactory.newInstance() .withDimension(1024, 768) .withTitle("Tron - Le jeu") .withDrawMethod(jeu::dessinerScene) .withKeyTypeHandler(jeu::gererTouche) .finish(); } }
KX
Messages postés
16755
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
26 févr. 2015 à 22:06
26 févr. 2015 à 22:06
Bon, je ne connais pas java.fx et je n'ai pas tout pour tester (au passage quel intérêt de recoder Vecteur2D ou Rectangle, alors que ce sont des classes qui existent déjà en Java ?), mais sur le principe :
Si à la fin de ton main() tu refais encore tout son contenu, soit avec une boucle while, soit avec un appel récursif à main, cela va recréer un objet JeuTron tout neuf, une nouvelle instance de SceneBuilderFactory et il ne devrait y avoir aucun résidu de l'exécution précédente.
Remarque : vu la différence de niveau de code j'imagine que SceneBuilderFactory n'est pas de toi, mais juste pour info, comment sont définies withDrawMethod et withKeyTypeHandler ? Avec des Consumer<T> en paramètre ?
Si à la fin de ton main() tu refais encore tout son contenu, soit avec une boucle while, soit avec un appel récursif à main, cela va recréer un objet JeuTron tout neuf, une nouvelle instance de SceneBuilderFactory et il ne devrait y avoir aucun résidu de l'exécution précédente.
public static void main(String title, int width, int height) { JeuTron jeu = new JeuTron(); SceneBuilderFactory.newInstance() .withDimension(width, height) .withTitle(title) .withDrawMethod(jeu::dessinerScene) .withKeyTypeHandler(jeu::gererTouche) .finish(); } public static void main(String[] args) { while (true) main("Tron - Le jeu", 1024, 768); }
Remarque : vu la différence de niveau de code j'imagine que SceneBuilderFactory n'est pas de toi, mais juste pour info, comment sont définies withDrawMethod et withKeyTypeHandler ? Avec des Consumer<T> en paramètre ?
Dracolos581
Messages postés
58
Date d'inscription
lundi 16 juillet 2012
Statut
Membre
Dernière intervention
25 septembre 2017
2
26 févr. 2015 à 22:58
26 févr. 2015 à 22:58
non en effet tout n est pas de moi , je suis étudiant et le prof nous a donné une base sur la quel travailler ^^ je ne saurai donc pas te renseigner sur se morceau désoler :/
je peu faire un appel récursif au main dans une méthode d'une autre class ?
et tu a une idée pour mon problème d'arraylist ? ^^
encore merci de ton aide :P
je peu faire un appel récursif au main dans une méthode d'une autre class ?
et tu a une idée pour mon problème d'arraylist ? ^^
encore merci de ton aide :P
KX
Messages postés
16755
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
>
Dracolos581
Messages postés
58
Date d'inscription
lundi 16 juillet 2012
Statut
Membre
Dernière intervention
25 septembre 2017
26 févr. 2015 à 23:35
26 févr. 2015 à 23:35
"je peu faire un appel récursif au main dans une méthode d'une autre class ?"
Le main est une méthode static comme une autre, donc oui.
"et tu a une idée pour mon problème d'arraylist ?"
Je n'avais pas vu cette question... mais dans la classe Trace il ne semble pas y avoir de problème. Par contre dans son utilisation peut-être.
Un de tes gros problème dans ton code, c'est que tu ne protèges pas tes données, tu peux donc les utiliser n'importe comment, et c'est ce que tu fais.
Par exemple, tu fais
Quant à ton problème, tu ajoutes toujours le même objet,
Ceci devrait corriger ton problème, à condition de bien te servir de la méthode, et non passer directement par
Ici on créé un nouvel objet dont la seule référence est dans la liste, l'objet d'origine peut donc évoluer tant qu'il veut, ça n'affectera pas la valeur de l'objet ajouté.
Le main est une méthode static comme une autre, donc oui.
"et tu a une idée pour mon problème d'arraylist ?"
Je n'avais pas vu cette question... mais dans la classe Trace il ne semble pas y avoir de problème. Par contre dans son utilisation peut-être.
Un de tes gros problème dans ton code, c'est que tu ne protèges pas tes données, tu peux donc les utiliser n'importe comment, et c'est ce que tu fais.
Par exemple, tu fais
trace.trace.add(moto.rectangle.position);ce qui est possible car tous tes attributs sont accessibles, mais pour être propre il faudrait faire
trace.ajouter_trace(moto.getPosition());.
Quant à ton problème, tu ajoutes toujours le même objet,
moto.rectangle.position, mais la liste ne conserve pas les valeurs au moment où l'objet a été ajouté, mais les valeurs évoluent dans chaque case en même temps que l'objet (en fait ce ne sont que des références vers le même objet) donc au final tous tes objets de la liste sont identiques.
Ceci devrait corriger ton problème, à condition de bien te servir de la méthode, et non passer directement par
trace.trace.addcomme indiqué plus haut.
public void ajouter_trace(Vecteur2d position_actuel) { trace.add(new Vecteur2d(position_actuel)); }
Ici on créé un nouvel objet dont la seule référence est dans la liste, l'objet d'origine peut donc évoluer tant qu'il veut, ça n'affectera pas la valeur de l'objet ajouté.
26 févr. 2015 à 08:41
en faite tu peu prendre comme exemple un petit jeux en 2d ( je travail sur le jeux TRON actuellement) quand la moto touche un mur ou la ligne quelle laisse derrière elle, elle dois repartir a 0. donc en gros la position de la moto, sont tracer(sous forme d'ArrayListe), sa direction doivent être remis comme au démarrage du programme.
26 févr. 2015 à 09:04
Mais la nécessité de recharger complètement toutes les classes signifie que ton état est porté par des variables statiques dans tous les sens ce qui est clairement un problème de conception.
Dans ton cas la manipulation de ClassLoader ou plus généralement la reinitialisation des classes relèverait de la bidouille plus qu'autre chose.
--
26 févr. 2015 à 09:16
26 févr. 2015 à 12:02
Tu devrais avoir un objet pour l'affichage de ton tracé et soit une méthode pour effacer l'affichage, soit remplacer l'objet complet de cet affichage dans la fenêtre.
Mais il serait sûrement plus simple de t'aider avec le code en question...
26 févr. 2015 à 16:17
si tu sais me passer ton email en mp je te l enverrai ^^