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

2D Java Discussion :

Probleme d affichage


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de snipes
    Inscrit en
    Septembre 2004
    Messages
    547
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 547
    Par défaut Probleme d affichage
    salut tout le monde
    j essaye de me faire un ti environnement graphique pr un jeu mais je me trouve confronté a un ti probleme la.je n arrive pas a afficher 2 elements simultanement dans le meme JFrame soit ca m affiche mon joueur soit ca m affiche mon decor comment faire pr associer les 2...Etant debutant jm y suis peut etre mal pris donc n hesité pas a me dire ce qui ne va pas
    je vous fais par de mon code :

    ma classe joueur
    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
    public class Joueur extends JPanel{
     
    	protected String nom; //Nom du Joueur
    	protected int px ; //Coordonnées X
    	protected int py; // Coordonnées Y
    	protected int vitess; // Vitesse de deplacement du Joueur
     
    	public String tof = "pics\\mage.jpg"; // Image du Joueur
    	protected Image img;
     
     
     
    	/** Constructeur du Joueur */
    	public Joueur(int x,int y)
    	{
    		this.px = x;
    		this.py = y;
    		this.vitess = 3;
     
    		//this.nom = name;
     
    		//recupération et initialistion de l'objet image
    		this.img = Toolkit.getDefaultToolkit().getImage(this.tof);
    	}
     
    	/** Methode permettant l affichage du joueur */ 
    	public void paint(Graphics g)
    	{
    		Graphics g2d = (Graphics2D) g;
    		g2d.clearRect(0,0,this.getWidth(),this.getHeight()); // vide l'ecran
    		g2d.drawImage(this.img,this.px,this.py,this);		
    	}
     
    	/** Methodes de deplacement du joueur      */
    	public void move_left()
    	{
    		this.px -= this.vitess;
    		repaint();
    	}
     
    	public void move_right()
    	{
    		this.px += this.vitess;
    		repaint();
    	}
    	public void move_up()
    	{
    		this.py -= this.vitess; 
    		repaint();
    	}
    	public void move_down()
    	{
    		this.py += this.vitess; 
    		repaint();
    	}
    }
    ma classe Map :

    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
    public class Map extends JPanel{
     
    	public int[][] Mat = {{1,1,1,1,1,1,1,1,1,1},
    						  {1,0,0,0,0,0,0,0,0,1},
    						  {1,0,0,0,0,0,0,0,0,1},
    						  {1,0,0,0,0,0,0,0,0,1},
    						  {1,0,0,0,0,0,0,0,0,1},
    						  {1,0,0,0,0,0,0,0,0,1},
    						  {1,0,0,0,0,0,0,0,0,1},
    						  {1,0,0,0,0,0,0,0,0,1},
    						  {1,0,0,0,0,0,0,0,0,1},
    						  {1,1,1,1,1,1,1,1,1,1}};
    	private Image rok;
    	private int ImgSize = 16;
     
    	public Map()
    	{
    		rok = Toolkit.getDefaultToolkit().getImage("pics\\roche.jpg");	
    	};
     
    	public void paint(Graphics g)
    	{
    		int i,j;
    		for(i=0;i<this.Mat.length;i++)
    		{
    			for(j=0;j<this.Mat.length;j++)
    			{
    				if(this.Mat[i][j] == 1)
    					g.drawImage(this.rok,i*this.ImgSize,j*this.ImgSize,this);
    			}
    		}
     
    	}
     
    }
    et ma classe censé afficher tout ca implementant 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
    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
    public class FrameMain extends JFrame implements KeyListener{
     
    	private JPanel Mypane;
    	public Joueur player = new Joueur(30,30);
    	public Map Mymap = new Map();
     
    	public FrameMain()
    	{
    		super();
    		build();				
    	}
     
    	public void build()
    	{
    		this.setTitle("Move My Fucking Pics");
    		this.setSize(new Dimension(200,200));
    		//this.setContentPane(getMyPane());
    		this.setLocationRelativeTo(null);
    		this.addKeyListener(this);
     
    		this.add(player);
    		this.add(Mymap);
    	}
    	public void keyTyped(KeyEvent arg0) {
    		// TODO Auto-generated method stub
     
    	}
     
    	public void keyPressed(KeyEvent e) {
    		// TODO Auto-generated method stub
    		if(e.getKeyCode() == KeyEvent.VK_DOWN)
    		{
    			System.out.println("DOWN");
    			player.move_down();
    		}
    		if(e.getKeyCode() == KeyEvent.VK_UP)
    		{
    			System.out.println("UP");
    			player.move_up();
    		}
    		if(e.getKeyCode() == KeyEvent.VK_LEFT)
    		{
    			System.out.println("LEFT");
    			player.move_left();
    		}
    		if(e.getKeyCode() == KeyEvent.VK_RIGHT)
    		{
    			System.out.println("RIGHT");
    			player.move_right();
    		}
    	}
     
    	public void keyReleased(KeyEvent arg0) {
    		// TODO Auto-generated method stub
     
    	}
    }
    merci pour votre aide

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Pour moi celà s'apparente à un petit problème de conception.

    Enfait tes objets Map et joueur ne devraient pas hériter de JPanel, mais simplement proposer une méthode permettant de dessiner sur des Graphics (que tu peux appeler paint si tu veux).

    Puis tu crées une classe héritant de JPanel , qui contient comme attributs une Map et un Joueur. Tu redéfinis pour cette classe la méthode paintComponent pour qu'elle apelle la méthode paint de ta map et ton joueur sur ses graphics

    Ce qui donnerait:

    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
    
    public class Joueur {
        
        protected String nom; //Nom du Joueur
        protected int px ; //Coordonnées X
        protected int py; // Coordonnées Y
        protected int vitess; // Vitesse de deplacement du Joueur
        
        public String tof = "pics\\mage.jpg"; // Image du Joueur
        protected Image img;
        
        
        
        /** Constructeur du Joueur */
        public Joueur(int x,int y)
        {
            this.px = x;
            this.py = y;
            this.vitess = 3;
            
            //this.nom = name;
            
            //recupération et initialistion de l'objet image
            this.img = Toolkit.getDefaultToolkit().getImage(this.tof);
        }
        
        /** Methode permettant l affichage du joueur */ 
        public void paint(Graphics g)
        {
    
            g.drawImage(this.img,this.px,this.py,null);        
        }
        
        /** Methodes de deplacement du joueur      */
        public void move_left()
        {
            this.px -= this.vitess;
            repaint();
        }
        
        public void move_right()
        {
            this.px += this.vitess;
            repaint();
        }
        public void move_up()
        {
            this.py -= this.vitess; 
            repaint();
        }
        public void move_down()
        {
            this.py += this.vitess; 
            repaint();
        }
    }

    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
    
    
    public class Map{
        
        public int[][] Mat = {{1,1,1,1,1,1,1,1,1,1},
                              {1,0,0,0,0,0,0,0,0,1},
                              {1,0,0,0,0,0,0,0,0,1},
                              {1,0,0,0,0,0,0,0,0,1},
                              {1,0,0,0,0,0,0,0,0,1},
                              {1,0,0,0,0,0,0,0,0,1},
                              {1,0,0,0,0,0,0,0,0,1},
                              {1,0,0,0,0,0,0,0,0,1},
                              {1,0,0,0,0,0,0,0,0,1},
                              {1,1,1,1,1,1,1,1,1,1}};
        private Image rok;
        private int ImgSize = 16;
        
        public Map()
        {
            rok = Toolkit.getDefaultToolkit().getImage("pics\\roche.jpg");    
        };
        
        public void paint(Graphics g)
        {
            int i,j;
            for(i=0;i<this.Mat.length;i++)
            {
                for(j=0;j<this.Mat.length;j++)
                {
                    if(this.Mat[i][j] == 1)
                        g.drawImage(this.rok,i*this.ImgSize,j*this.ImgSize,null);
                }
            }
                
        }
     
    }
    Code java : 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
    
    public class ecran extends JPanel {
    
    private Joueur joueur;
    private Map map;
    
    
    //Constructeurs et tout le toutim
    
    protected void paintComponent(Graphics g) {
       Graphics g2d = (Graphics2D) g;
       g2d.clearRect(0,0,this.getWidth(),this.getHeight()); // vide l'ecran       
       joueur.paint(g);
       map.paint(g);
    }
    
    
    
    
    }

  3. #3
    Membre éclairé Avatar de snipes
    Inscrit en
    Septembre 2004
    Messages
    547
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 547
    Par défaut
    j'ai testé ce que tu m as proposé mais il y a des erreurs a la compilations au niveau de joueur.paint(g) et map.paint(g)

  4. #4
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Euh, c'est pas la mort de virer un certain nombre d'appels à repaint().
    J'en ais profité pour faire deux corrections sur ce que j'avais écris sans tester

    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
     
     
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Image;
    import java.awt.Toolkit;
    import java.io.IOException;
     
    import javax.imageio.ImageIO;
     
    public class Joueur {
     
        protected String nom; //Nom du Joueur
        protected int px ; //Coordonnées X
        protected int py; // Coordonnées Y
        protected int vitess; // Vitesse de deplacement du Joueur
     
        public String tof = "pics/mage.jpg"; // Image du Joueur
        protected Image img;
     
     
     
        /** Constructeur du Joueur */
        public Joueur(int x,int y)
        {
            this.px = x;
            this.py = y;
            this.vitess = 3;
     
            //this.nom = name;
     
            //recupération et initialistion de l'objet image
            try {
                this.img = ImageIO.read(getClass().getResourceAsStream(this.tof));
                System.out.println(img);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
     
        /** Methode permettant l affichage du joueur */ 
        public void paint(Graphics g)
        {
            Graphics2D g2d = (Graphics2D) g;
            g2d.drawImage(this.img,this.px,this.py,null);        
        }
     
        /** Methodes de deplacement du joueur      */
        public void move_left()
        {
            this.px -= this.vitess;
        }
     
        public void move_right()
        {
            this.px += this.vitess;
        }
        public void move_up()
        {
            this.py -= this.vitess; 
        }
        public void move_down()
        {
            this.py += this.vitess; 
        }
    }

    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
     
     
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.Toolkit;
    import java.io.IOException;
     
    import javax.imageio.ImageIO;
     
     
    public class Carte{
     
        public int[][] Mat = {{1,1,1,1,1,1,1,1,1,1},
                              {1,0,0,0,0,0,0,0,0,1},
                              {1,0,0,0,0,0,0,0,0,1},
                              {1,0,0,0,0,0,0,0,0,1},
                              {1,0,0,0,0,0,0,0,0,1},
                              {1,0,0,0,0,0,0,0,0,1},
                              {1,0,0,0,0,0,0,0,0,1},
                              {1,0,0,0,0,0,0,0,0,1},
                              {1,0,0,0,0,0,0,0,0,1},
                              {1,1,1,1,1,1,1,1,1,1}};
        private Image rok;
        private int ImgSize = 16;
     
        public Carte()
        {
            try {
                rok = ImageIO.read(getClass().getResourceAsStream("pics/roche.jpg"));
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            System.out.println(rok);
        };
     
        public void paint(Graphics g)
        {
            int i,j;
            for(i=0;i<this.Mat.length;i++)
            {
                for(j=0;j<this.Mat.length;j++)
                {
                    if(this.Mat[i][j] == 1)
                        g.drawImage(this.rok,i*this.ImgSize,j*this.ImgSize,null);
                }
            }
     
        }
     
    }

    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
     
     
    import java.awt.Graphics;
    import java.awt.Graphics2D;
     
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     
    public class Ecran extends JPanel {
     
        private Joueur joueur;
     
        private Carte map;
     
     
     
     
        // Constructeurs et tout le toutim
     
        public Ecran(Joueur joueur, Carte map) {
            super();
            this.joueur = joueur;
            this.map = map;
        }
     
     
     
     
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics g2d = (Graphics2D) g;
            g2d.clearRect(0, 0, this.getWidth(), this.getHeight()); // vide l'ecran
            map.paint(g);
            joueur.paint(g);
     
     
        }
     
     
        public static void main(String[] args) {
            JFrame f = new JFrame();
            Joueur j = new Joueur(5,10);
            Carte carte = new Carte();
            Ecran ecran = new Ecran(j,carte);
            f.add(ecran);
            f.setSize(500,500);
            f.setLocationRelativeTo(null);
            f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            f.setVisible(true);
        }
    }
    Cette fois ci il est testé, si tu n'arrives pas à le faire marcher ....

  5. #5
    Membre éclairé Avatar de snipes
    Inscrit en
    Septembre 2004
    Messages
    547
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 547
    Par défaut
    (euh, j avais supprimé les repaint() )
    ok c'est bon j'ai exactement ce que je souhaitais je te remercie pour ton aide je vais essayer d'assimiler ce ti truk et continuer tout seul comme un grand

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

Discussions similaires

  1. [VB.NET] Probleme d'affichage entre ListBox/TextBox
    Par Monster77 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 03/08/2004, 11h02
  2. [VB.NET] Probleme d'affichage de controle
    Par mic56 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 09/06/2004, 15h03
  3. xml-xsl-fo : probleme d'affichage d'un tableau
    Par clindoeil dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 12/12/2003, 12h46
  4. [langage] Problème d'affichage
    Par marcoss dans le forum Langage
    Réponses: 3
    Dernier message: 29/08/2003, 13h05
  5. IE [Applet] Plug-in problème d'affichage
    Par Tonton Luc dans le forum JBuilder
    Réponses: 4
    Dernier message: 19/06/2003, 08h28

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