Des petits JPanel en mouvement sur un plus grand JPanel
Fermé
philub
Messages postés
256
Date d'inscription
samedi 31 mars 2007
Statut
Membre
Dernière intervention
28 mars 2015
-
28 mars 2015 à 04:41
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 28 mars 2015 à 19:33
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 28 mars 2015 à 19:33
A voir également:
- Des petits JPanel en mouvement sur un plus grand JPanel
- Photo insta en grand - Guide
- Excel trier du plus grand au plus petit - Guide
- Ordinateur portable grand ecran - Guide
- Le fichier est trop grand pour le système de fichier de destination ✓ - Forum Windows
- Note de bas de page word espace trop grand ✓ - Forum Word
1 réponse
KX
Messages postés
16733
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 janvier 2024
3 015
28 mars 2015 à 14:00
28 mars 2015 à 14:00
Bonjour,
Pourquoi tu parles de JPanel ? JPanel est une catégorie de Container, toi ce qu'il te faudrait ce sont plutôt des Component, un JLabel par exemple.
Quant à ton problème de déplacement, tu dois faire ça avec des Threads qui déplaceraient ton JLabel sur la JFrame...
Voir Defining and Starting a Thread et Doing Without a Layout Manager (Absolute Positioning).
Exemple :
Pourquoi tu parles de JPanel ? JPanel est une catégorie de Container, toi ce qu'il te faudrait ce sont plutôt des Component, un JLabel par exemple.
Quant à ton problème de déplacement, tu dois faire ça avec des Threads qui déplaceraient ton JLabel sur la JFrame...
Voir Defining and Starting a Thread et Doing Without a Layout Manager (Absolute Positioning).
Exemple :
import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; public class Test { private static void pause(long millis) { try { Thread.sleep(millis); } catch (Exception e) { } } public static void main(String[] args) { final Icon iconHorz = new ImageIcon("C:/rouge.png"); final JLabel horz = new JLabel(iconHorz); horz.setBounds(0, 0, iconHorz.getIconWidth(), iconHorz.getIconHeight()); final Icon iconVert = new ImageIcon("C:/bleu.png"); final JLabel vert = new JLabel(iconVert); vert.setBounds(0, 0, iconVert.getIconWidth(), iconVert.getIconHeight()); final JFrame frame = new JFrame(); frame.setSize(200,200); frame.setLayout(null); frame.add(horz); frame.add(vert); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); new Thread() { @Override public void run() { while (true) { while (horz.getX() < frame.getContentPane().getWidth()-horz.getWidth()) { horz.setLocation(horz.getX()+1, horz.getY()); pause(10); } while (horz.getX() > 0) { horz.setLocation(horz.getX()-1, horz.getY()); pause(5); } } } }.start(); new Thread() { @Override public void run() { while (true) { while (vert.getY() < frame.getContentPane().getHeight()-vert.getHeight()) { vert.setLocation(vert.getX(), vert.getY()+1); pause(10); } while (vert.getY() > 0) { vert.setLocation(vert.getX(), vert.getY()-1); pause(5); } } } }.start(); } }
28 mars 2015 à 18:26
J'ai testé votre code et j'ai trouvé l'animation très intéressante. J'essaie de faire en sorte d'avoir 50 petites images bleues qui restent à l'intérieur d'un grand carré rouge fixe. Les petites images se déplaceront dans toutes les directions selon un algorithme et obtenir la liste des positions des bleus avec un système de grille, une HashMap de positions et mettre à jour cette HashMap à chaque déplacement dans la grille afin d'adapter son objectif de déplacement.
C'est vraiment compliqué, dès que je trouve j'envoie le résultat. Je crois que c'est la logique de base qu'ils ont utilisé pour faire le jeux civilization. Dessiner une carte de fond, appliquer une grille de positions et ensuite placer les éléments (ouvrier, ville, Blé, etc.) Mon objectif final est beaucoup plus simple que de faire le jeu civilization.
28 mars 2015 à 19:33
Les algorithmes pour chaque case c'est la méthode run() du Thread (mon exemple est super basique). Quant à la HashMap on peut la faire comme ceci :
Remarque : j'ai mis tout le code dans la méthode main, mais pour faire propre il faudrait faire des classes Java, par exemple un Personnage dont un membre sera le JLabel et un autre le Thread, avec éventuellement plusieurs sous classes où chacune aurait un algorithme run() différent.
Et il n'est pas exclu de changer l'image du JLabel au fur et à mesure de son déplacement, par exemple avec un personnage qui regarde dans la direction où il va.