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

Graphisme Java Discussion :

problème image de premier plan en arrière plan


Sujet :

Graphisme Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 10
    Points : 9
    Points
    9
    Par défaut problème image de premier plan en arrière plan
    Bonjour,
    Je dois, pour les cours, développer un petit jeu.
    Lors du codage, je rencontre un problème que je n'arrive à résoudre ni en recourant à mes feuilles de cours, ni en m'aidant des différents sites internet.
    Voilà mon problème:
    J'ai une image de fond, des cubes qui se déplacent, et une image d'un personnage qui se déplace avec les touches du clavier.
    L'image de fond et les cubes s'affichent bien, mais mon image de personnage se met automatiquement en arrière-plan.
    Lorsque je lance le programme, je vois le personnage qui apparaît et qui est directement recouvert par mon image de fond.
    Dans mon code, j'ai fais apparaître l'image en premier, les cubes en second, et le personnage en dernier. J'ai beau essayer de faire apparaître le personnage avant l'image de fond, rien n'y fait.
    Voilà mon bout de code qui concerne l'apparition du personnage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    private GImage coureur;
    	public void init (){
    		coureur = new GImage("essai1.png",0,550);
    		add(coureur);
    		addKeyListeners();
    	}
    	public void keyPressed(KeyEvent e){
    		int touche = e.getKeyCode();
    		if(touche == KeyEvent.VK_UP)
    			coureur.move(0,-50);
    		else if (touche == KeyEvent.VK_DOWN)
    			coureur.move(0,50);
    	}
    Voilà, j'aimerai bien recevoir de l'aide concernant ce soucis.
    Merci d'avoir tout lu, bonne fin de weekend à tous.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Difficile de se prononcer sans en savoir plus. Le code de la méthode d'affichage des différentes images en particulier est indispensable.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Voilà alors mon code complet:

    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
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
     
    import java.awt.Color;
    import java.awt.event.KeyEvent;
    import acm.graphics.GRect;
    import acm.program.GraphicsProgram;
    import acm.graphics.GImage;
     
     
    public class test1 extends GraphicsProgram {
    	public void run() {
    		GImage fond = new GImage("imgfond.png", 0, 0);
    		add(fond);
     
    			GRect cube1 = new GRect(200, 425, 25, 25);
    			cube1.setFilled(true);
    			cube1.setFillColor(Color.BLACK);
    			cube1.setColor(Color.BLACK);
    			add(cube1);
     
    			GRect cube2 = new GRect(350, 525, 25, 25);
    			cube2.setFilled(true);
    			cube2.setFillColor(Color.BLACK);
    			cube2.setColor(Color.BLACK);
    			add(cube2);
     
    			GRect cube3 = new GRect(600, 425, 25, 25);
    			cube3.setFilled(true);
    			cube3.setFillColor(Color.BLACK);
    			cube3.setColor(Color.BLACK);
    			add(cube3);
     
    			GRect cube4 = new GRect(850, 625, 25, 25);
    			cube4.setFilled(true);
    			cube4.setFillColor(Color.BLACK);
    			cube4.setColor(Color.BLACK);
    			add(cube4);
     
    			GRect cube5 = new GRect(1100, 125, 25, 25);
    			cube5.setFilled(true);
    			cube5.setFillColor(Color.BLACK);
    			cube5.setColor(Color.BLACK);
    			add(cube5);
     
    			GRect cube6 = new GRect(1350, 325, 25, 25);
    			cube6.setFilled(true);
    			cube6.setFillColor(Color.BLACK);
    			cube6.setColor(Color.BLACK);
    			add(cube6);
     
    			GRect cube7 = new GRect(1600, 825, 25, 25);
    			cube7.setFilled(true);
    			cube7.setFillColor(Color.BLACK);
    			cube7.setColor(Color.BLACK);
    			add(cube7);
     
    			GRect cube8 = new GRect(1850, 225, 25, 25);
    			cube8.setFilled(true);
    			cube8.setFillColor(Color.BLACK);
    			cube8.setColor(Color.BLACK);
    			add(cube8);
     
    			GRect cube9 = new GRect(2100, 425, 25, 25);
    			cube9.setFilled(true);
    			cube9.setFillColor(Color.BLACK);
    			cube9.setColor(Color.BLACK);
    			add(cube9);
     
    			while (true) {
    				;
    				cube1.move(-5, 0);
    				pause(5);
    				cube2.move(-5, 0);
    				pause(5);
    				cube3.move(-5, 0);
    				pause(5);
    				cube4.move(-5, 0);
    				pause(5);
    				cube5.move(-5, 0);
    				pause(5);
    				cube6.move(-5, 0);
    				pause(5);
    				cube7.move(-5, 0);
    				pause(5);
    				cube8.move(-5, 0);
    				pause(5);
    				cube9.move(-5, 0);
    				pause(5);	
    			}
    	}
    private GImage coureur;
    	public void init (){
    		coureur = new GImage("essai1.png",0,550);
    		add(coureur);
    		addKeyListeners();
    	}
    	public void keyPressed(KeyEvent e){
    		int touche = e.getKeyCode();
    		if(touche == KeyEvent.VK_UP)
    			coureur.move(0,-50);
    		else if (touche == KeyEvent.VK_DOWN)
    			coureur.move(0,50);
    	}
    }
    La première image est la GImage fond (imgfond.png) et celle de mon personnage est la dernière, la GImage coureur(essai1.png)

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Ce n'est pas du Java standard : ça utilise une bibliothèque, et aucun source n'est fourni. Reste la documentation pour expliquer les subtilités de son fonctionnement. En tout cas je ne connais pas et je ne peux dire comment c'est censé fonctionner. Et rien n'oblige que l'affichage soit forcément dans l'ordre d'ajout.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    D'après le code source, la méthode init() est exécutée avant la méthode run(). Donc le coureur est ajouté dans la liste en premier, et comme la méthode de redessin affiche les composants dans l'ordre d'ajout, le coureur est toujours dessiné en premier, le reste au-dessus.

    /**
    * Specifies the code to be executed as startup time before the
    * <code>run</code> method is called. Subclasses can override this
    * method to perform any initialization code that would ordinarily
    * be included in an applet <code>init</code> method. In general,
    * subclasses will override <code>init</code> in GUI-based programs
    * where the program simply sets up an initial state and then waits
    * for events from the user. The <code>run</code> method is required
    * for applications in which there needs to be some control thread
    * while the program runs, as in a typical animation.
    *
    * @usage program.init();
    */
    public void init() {
    /* Empty */
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    D'accord ... C'est bizarre quand même :/
    Je dois faire comment du coup pour faire afficher mon perso après mon fond ? Si je mets une pause(1000) par exemple avant le add(coureur) tu penses que ça peut marcher ?
    En tout cas merci pour tes réponses !

  7. #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Je tenterais de le faire avant le "while(true)" plutôt. A ce propos 2 choses : premièrement, toujours éviter les while(true) (toujours préférer une condition qui peut passer à false, avec un moyen de la passer à false. Secondement, JTF est fondé sur AWT, donc ses principes s'appliquent : si la méthode run() est invoquée sur le thread graphique, la boucle est bloquante. Si tu vois que l'animation se fait, c'est que ce n'est pas le cas : dans ce cas, les coordonnées sont manipulées par 2 threads, ce qui provoquer des défauts dans l'affichage.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Je garde soigneusement ta réponse sous le bras car elle contient des notions que je maîtrise pas encore.
    J'ai finalement trouvé l'origine de mon problème.
    J'ai une fonction principale public void run, et c'est dans celle-ci que se trouvait le code d'apparition de mon personnage.
    En revanche, le code faisant apparaître l'image de fond se trouvait dans la fonction public void init, qui envoie donc tout ce qui s'y trouve en premier, avant d'appliquer la partie public void run. J'ai donc mis mon code pour le personnage dans la partie public void run, juste après l'apparition du fond, et l'image apparaît comme prévu.
    Je te remercie de l'aide que tu m'as proposée, qui m'a fait découvrir quelques notions qui m'étaient alors étrangères.
    Bonne soirée, et à bientôt !

Discussions similaires

  1. Capturer l'image d'une fenêtre en arrière plan
    Par Etanne dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 09/06/2013, 01h29
  2. Réponses: 2
    Dernier message: 14/03/2011, 08h22
  3. Image dans une userform en arrière plan
    Par pomdeterfrite dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 05/11/2010, 13h50
  4. image en premier plan et arrière plan
    Par NoussaGh dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 25/11/2009, 15h15
  5. petit problème premier plan, arrière plan
    Par gros bob dans le forum OpenGL
    Réponses: 4
    Dernier message: 19/04/2004, 12h00

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