Bonsoir (ou bonjour)
Je n'ai pas eu le temps de temps de bosser sur mon projet, amis maintenant que je suis en vacances, je compte avancer.
Bonsoir (ou bonjour)
Je n'ai pas eu le temps de temps de bosser sur mon projet, amis maintenant que je suis en vacances, je compte avancer.
Bonsoir (ou bonjour)
Je n'ai pas eu le temps de temps de bosser sur mon projet, amis maintenant que je suis en vacances, je compte avancer.
J'ai créé 2 types d'individus: les elfes et les trolls. J'utilise des cercles bleus et jaunes pour les représenter (avec paintComponent). Là je me heurte à un problème. J'arrive à créer et faire bouger un seul cercle dans ma jframe. Mais je veux par exemple créer 30 elfes et 30 trolls et les faire se déplacer dans la frame. Je ne sais pas comment m'y prendre.
Voilà ce que j'ai fait:
classe Individus:
classe Elfe:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 public class Individus extends JPanel implements IMentale, IPhysique, ActionListener { int patience; int agressivite; int negociation; int capacite; int posX; int posY; public Individus() { } @Override public void paintComponent(Graphics g) { g.setColor(Color.white); g.fillRect(0, 0, 700, 600); } public int getPosX() { return posX; } public int getPosY() { return posY; } public void setPosX(int posX) { this.posX = posX; } public void setPosY(int posY) { this.posY = posY; } }
Classe Troll:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 public class Elfe extends Individus { public int vol; // private Utilitaire u = new Utilitaire(); public Elfe() { } public Elfe(int x, int y) { this.posX = x; this.posY = y; } @Override public void paintComponent(Graphics g) { super.paintComponent(g); g.setColor(Color.BLUE); g.fillOval(posX, posY,20,20); } public void setVol(int vol) { this.vol = vol; } public int getVoler() { return this.vol; } }
Une dernière classe Univers où je crée mes individus:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 public class Troll extends Individus { Color couleur; public Troll() { } public Troll(int x, int y) { this.posX = x; this.posY = y; } @Override public void paintComponent(Graphics g) { super.paintComponent(g); g.setColor(Color.YELLOW); g.fillOval(posX, posY,20,20); } public void setCouleur(Color couleur) { this.couleur = couleur; } public Color getCouleur() { return this.couleur; } }
J'ai suivi un tutoriel Java pour faire l'animation d'une forme géométrique.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84 public class Univers { JFrame fenetre = new JFrame("Informations sur les individus"); JFrame monde = new JFrame("Monde"); private int totalPopulation; Individus i; public Elfe e; public Troll t; // Utilitaire u = new Utilitaire; ArrayList<Elfe> elfes = new ArrayList<Elfe>(); ArrayList<Troll> trolls = new ArrayList<Troll>(); public Univers() { } public void create() { fenetre.setSize(300, 400); // fenetre.setLocationRelativeTo(null); fenetre.setBackground(Color.WHITE); // fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); monde.setSize(700, 600); monde.setPreferredSize(new Dimension(700, 635)); // monde.setBackground(Color.GREEN); monde.setLocationRelativeTo(null); monde.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //création d'un seul elfe (qui marche) // e = new Elfe(); // monde.add(e); //Création de 30 elfes et 30 trolls avec stockage dans des ArrayList //Ne marche pas. Ecrase chaque et seule le dernier individus est affiché sans mouvement for(int i=0; i<30; i++) { e = new Elfe(u.randomChiffre(1, 500), u.randomChiffre(1, 600)); monde.add(e); t = new Troll(u.randomChiffre(1, 500), u.randomChiffre(1, 600)); monde.add(t); //Ajout aux arrayList elfes.add(e); trolls.add(t); } // fenetre.setVisible(true); monde.pack(); monde.setVisible(true); //appel de la méthode de déplacement //le programme ne se lance pas si je mets cette méthode dans la boucle for go(t); } //méthode de déplacement que j'aimerai private void go(Individus i) { for(;;) { int x = i.getPosX(), y = i.getPosY(); x++; y++; i.setPosX(x); i.setPosY(y); i.repaint(); // monde.revalidate(); try { Thread.sleep(30); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
J'aimerai aussi pouvoir récupérer la position de chaque élément à tout moment, ...
Dans mon programme principal j'appelle la méthode create() de Univers.
Je travaille sous netbeans.
Voilà, j'espère que vous aurez une solution pour que mes cercles jaunes et bleus qui se déplacent sur la même surface.
Merci pour toutes vos réponses précédentes et vos encouragements.
Bonnes fêtes!!
Le meilleure solution pour moi est soit d'assigner un Timer à chacun des objets qui bougent, soit d'avoir un timer global.
Le but est que ton timer tous les delta secondes, en fonction de l'état de tes objets calcule leur nouvelles positions. Il ne te reste plus qu'ensuite à mettre à jour l'affichage.
Merci pour le tuyau du timer pour gérer le déplacement des objets.
Cependant, dans mon code, je n'arrive pas à afficher plusieurs objets simultanément dans ma jframe.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 public void create() { fenetre.setSize(300, 400); fenetre.setBackground(Color.WHITE); monde.setSize(700, 635); monde.setPreferredSize(new Dimension(700, 635)); monde.setLocationRelativeTo(null); monde.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // ajout de plusieurs objets dans la frame for(int i=0; i<30; i++) { e = new Elfe(u.randomChiffre(1, 500), u.randomChiffre(1, 600)); monde.add(e); t = new Troll(u.randomChiffre(1, 500), u.randomChiffre(1, 600)); monde.add(t); //Ajout aux arrayList elfes.add(e); trolls.add(t); } monde.pack(); monde.setVisible(true); }
Peut-être que lorsque tu affiches un objet tu effaces tout le reste de ton panel?
Et qu'apres donc tu ne redessines que lui, ce qui fait que tu n'as toujours qu'un objet.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager