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

Interfaces Graphiques en Java Discussion :

Problème casse brique


Sujet :

Interfaces Graphiques en Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 2
    Par défaut Problème casse brique
    Bonjour a tous,
    Je souhaiterai faire un casse brique en java.
    J'ai commencé à développé quelques classes mais je rencontre déjà des problèmes.
    J'ai donc commencé par la barre. Pour la faire bouger, j'ai ajouté un MouseMotionListener.
    J'ai effectuer quelques test pour me rendre compte que la méthode move était bien appelée mais que la barre ne se redessine pas.
    Il s'agit donc d'un problème de rafraîchissement. J'utilise la méthode repaint() qui ne fonctionne pas dans ce cas présent.

    Voici ma classe barre qui dessine la barre :
    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
    public class Bar{
     
    	private double barX;
    	private double barY;
    	private int barWidth;
    	private int barHeight;
    	private Rectangle barBloc;
     
     
    	public Bar(double x, double y, int a, int b) 
    	{
    		barX = x;
    		barY = y;
    		barWidth = a;
    		barHeight = b;
    		barBloc = new Rectangle((int)barX, (int)barY, barWidth, barHeight);
    	}
     
    	//draw the bar
    	public void Draw(Graphics g){
    		g.setColor(Color.green);
    		g.fillRect(barBloc.x, barBloc.y, barBloc.width, barBloc.height);	
    	}
     
    	//move the bar
    	public void move(int x){
    		if( x > 0 && x < 690)
    		{
    			System.out.println(getBar_x() + " " + x);
    			barX = x;
    			barBloc.setLocation(x, (int)barY );
    		}
    	}
    Voici ma classe Panel qui gère l'application :
    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
    public class Panel extends JFrame {
     
    	JPanel surface = null;
     
    	public Panel(){
    		surface = new Surface();
    		surface.setPreferredSize(new Dimension(800, 600));
    		add(surface);
    		pack();
     
    		setTitle("Casse brique");
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setLocationRelativeTo(null);		
     
    		setVisible(true);
    	}
    }
    Voici ma classe Surface qui gère l'affichage des deux objets et écoute le curseur :
    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
    public class Surface extends JPanel implements MouseMotionListener{
     
    	private Bar bar;
    	private Ball ball;
     
    	public void paintComponent(Graphics g2) {
    		super.paintComponent(g2);
    		bar = new Bar(300,540,100,10);
    		ball = new Ball(100,100,8,8,2,2);
    		bar.Draw(g2);
    		ball.Draw(g2);	
    	}
     
    	public Surface(){
    		addMouseMotionListener(this);
    	}
     
    	@Override
    	public void mouseDragged(java.awt.event.MouseEvent e) {}
     
    	@Override
    	public void mouseMoved(java.awt.event.MouseEvent e) {
    		if(bar != null)
    			bar.move(e.getX());
    		repaint();
    	}
    }
    Merci d'avance de votre aide.

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 2
    Par défaut Solution trouvé
    Finalement je viens de trouver la réponse que je cherchais.
    Lorsque je crée un nouvel objet bar dans paintComponent il est toujours crée avec une position de 300 donc c'est pour cela qu'il n'a aucun raison de modifié la position en x.
    J'ai donc créer une variable qui prend pour valeur la postion du curseur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    private int posX;
    bar = new Bar(posX,540,100,10);
    Et on change l'action de mouseMoved :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public void mouseMoved(java.awt.event.MouseEvent e) {
    		posX = e.getX();
    		if(bar != null)
    			bar.move(posX);
    		repaint();
    	}

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

Discussions similaires

  1. Création d'un casse-briques
    Par psgkiki dans le forum Assembleur
    Réponses: 4
    Dernier message: 02/04/2007, 16h18
  2. Réponses: 5
    Dernier message: 06/09/2006, 09h35
  3. [Source] [SDL] Commencement d'un casse brique
    Par grincheux01 dans le forum Contribuez
    Réponses: 8
    Dernier message: 29/06/2006, 12h27
  4. Button "Start" dans un jeu de casse brique
    Par tex78 dans le forum Interfaces Graphiques en Java
    Réponses: 6
    Dernier message: 24/01/2006, 15h47
  5. [Tkinter] casse brique
    Par mamatt77 dans le forum Tkinter
    Réponses: 6
    Dernier message: 18/04/2005, 09h43

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