IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

[débutant] Gestion images pour un jeu


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2006
    Messages : 66
    Par défaut [débutant] Gestion images pour un jeu
    Bonjour,

    voilà, je fais un affichage graphique en Swing à base de JLabels qui contiennent des ImageIcon.
    Le but final est d'avoir un décor avec un personnage qui peut s'y promener, et, changer le décor quand le personnage arrive au bord de l'image.

    Aperçu de ce que j'ai pour l'instant :


    Les problèmes:
    - J'aimerais faire en sorte que lorsque le personnage passe devant un objet, il apparaisse devant, mais qu'il apparaisse derrière lorsqu'il passe derrière (lorsqu'il remonte). Or la "priorité" des JPanel est définie par l'ordre dans lequel ils sont insérés.
    Y a-t-il une façon de changer cet ordre sans avoir à tous les retirer, et tous les remettre dans un ordre différent ?
    - Pour faire changer de décor, il faut que je vide le JComponent de l'image. J'ai cherché dans la doc, mais je n'ai rien vu qui ressemblait à un clear()...
    Une méthode pour faire ceci existe-t-elle ?
    - Il est fort possible que je m'y soit mal pris dans mes choix (JPanel, JCOmponent), mais je ne sais pas vraiment faire autrement. Si vous voyez un meilleur moyen de s'y prendre, et plus pratique, n'hésitez pas à m'en faire part.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	//futur conteneur du niveau
    	Niveau niveau;
     
    	//futur conteneur des éléments de décor
    	ElementDuDecor elements[];
     
    	//futur conteneur des obstacles du décor
    	Obstacle obstacles[];
    Les tableaux sont remplis en lisant des fichiers XML contenant les caractéristiques du décor.

    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
    		//configuration de la fenêtre
    		setSize(800,600);
    		setTitle("interface");
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		JComponent contentPane = (JComponent)getContentPane();
    		contentPane.setLayout(null);
    		//fin configuration de la fenêtre
     
     
     
    		//insertion du personnage
    		contentPane.add(perso);
    		perso.setBounds(0,200,75,75);
     
    		//tempLabel,tempElement: éléments temporaires servant dans la boucle d'insertion des éléments
    		JLabel tempLabel;
    		ElementDuDecor tempElement;
     
    		//i: itérateur
    		int i=0;
     
    		//insertion des éléments du décor
    		while(i<(elements.length))
    		{
    			tempElement=elements[i];
    			tempLabel=new JLabel(new ImageIcon(tempElement.nomDuFichierImage));
    			contentPane.add(tempLabel);
    			tempLabel.setBounds(tempElement.x,tempElement.y,tempElement.largeur,tempElement.hauteur);
    			i++;
    		}//fin insertion des éléments du décor

    Merci d'avance pour toute aide

  2. #2
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Utilise un JLayeredPane pour gérer la priorité de la profondeur des composants.

    Pour changer le décor, remplace simplement l'image courante par la nouvelle image.

  3. #3
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2006
    Messages : 66
    Par défaut
    Je me suis un peu documenté sur les JLayeredPane, et c'est exactement ce que je cherchais, je pense pour l'implémenter assez facilement à mon programme merci

    Par contre, pour le changement de niveau,changer l'image courante ne suffirait pas. En effet, le décor est constitué de plusieurs images (fond, arbre, maison, buisson). Il n'y a vraiment aucune méthode qui permettrait de "nettoyer" le JComponent ?

    De plus, quand j'ajoute mes éléments, je ne garde pas de référence vers eux.
    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
    		//tempLabel,tempElement: éléments temporaires servant dans la boucle d'insertion des éléments
    		JLabel tempLabel;
    		ElementDuDecor tempElement;
    //i: itérateur
    		int i=0;
     
    		//insertion des éléments du décor
    		while(i<(elements.length))
    		{
    			tempElement=elements[i];
    			tempLabel=new JLabel(new ImageIcon(tempElement.nomDuFichierImage));
    			contentPane.add(tempLabel);
    			tempLabel.setBounds(tempElement.x,tempElement.y,tempElement.largeur,tempElement.hauteur);
    			i++;
    		}//fin insertion des éléments du décor
    Impossible donc de les supprimer un par un. :/

  4. #4
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Tu peux soit garder les références et les changer, soit créer un seul composant chargé du dessin du décor (meilleure solution à mon avis), soit enlever tous les composants du décor et en mettre de nouveaux.

  5. #5
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2006
    Messages : 66
    Par défaut
    Citation Envoyé par Gfx
    Tu peux soit garder les références et les changer,
    j'y avais pensé, mais le problème c'est que le nombre d'élément que j'ajoute est à chaque fois différent, alors je ne vois pas comment m'y prendre.

    Citation Envoyé par Gfx
    soit créer un seul composant chargé du dessin du décor (meilleure solution à mon avis),
    Je ne sais pas si c'est ce dont vous voulez parler mais je pense mettre le chargement du "tableau" dans un fonction chargementDuTableau() qui prendrait comme argument un String avec le chemin du fichier XML contenant le niveau.
    Cela dit, comme je garde toujours le même JComponent, il faudrait fatalement que je le vide à un moment où à un autre avant d'y charger le prochain "tableau".

    Citation Envoyé par Gfx
    soit enlever tous les composants du décor et en mettre de nouveaux.
    C'est ce que je pensait faire, mais j'ai beau parcourir la doc, je ne trouve pas de fonction clear() (ou quelque chose qui s'y apparente).
    La Solution seriat peut-être de supprimer le JComponent et de le recréer à chaque niveau (et espérer que le ramasse-miettes s'amuse à enlever tout les JPanel que je n'ai pas enlevé moi-même).

  6. #6
    Membre éclairé
    Avatar de JMLLB
    Inscrit en
    Septembre 2006
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 285
    Par défaut Problèmatique proche
    Pour une problématique un peu similaire (bien que différente) j'ai choisis une solution autre.
    J'utilise une classe chapeau implémentant une méthode paint(Graphics g) et avec un arrayList contenant des objets implementant aussi une méthode paint.
    Dans la fonction paint je dessine chacun des composant stocké dans l'arrayList dans l'ordre où ils sont.
    Si j'ai besoin de changer l'ordre j'utilise les méthodes de l'arrayList.
    Je met un objet de ma classe chapeau dans un Jpanel étendu ou je surcharge la fonction paint.
    C'est très souple pour le placement des objets, les transformations afine et les applications de texture.

    Il est vrai que l'on doit pouvoir en faire autant rien qu'avec des composants existant, ca dépend jusqu'où tu comptes pousser les effets graphique.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Affichage d'images pour jeu de cartes
    Par sebcrash dans le forum Windows Forms
    Réponses: 4
    Dernier message: 08/02/2008, 09h35
  2. [Debutant] Probleme de gestion des joueurs pour un jeu
    Par Mokette dans le forum Langage
    Réponses: 21
    Dernier message: 10/01/2008, 23h01
  3. Réponses: 4
    Dernier message: 08/11/2007, 16h15
  4. Quel langage pour logiciel gui/gestion image ?
    Par Invité(e) dans le forum Langages de programmation
    Réponses: 12
    Dernier message: 18/10/2006, 10h38
  5. Réponses: 8
    Dernier message: 12/06/2006, 22h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo