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

avec Java Discussion :

Problème de position d'une balle


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2013
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 36
    Points : 19
    Points
    19
    Par défaut Problème de position d'une balle
    Bonjour,

    Alors voilà je débute en java et j'ai un problème ma balle ne rebondit pas toujours sur mon rectangle si quelqu'un avait une idée. Je récupère la position du rectangle grâce au coordonnée de la souris. Mon idée était : si la position de la balle est comprise entre la position x de la souris et la position x de la souris + la taille du rectangle alors la balle rebondit mais visiblement il manque quelque chose.

    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
     
      public void go(){        
            x[balle] = pan.getPosX();   
            y[balle] = pan.getPosY();
     
            boolean backX = false;
            boolean backY = false;
     
            while(this.animated){
                if(x[balle] < 1) 
                    backX = false;
                if(x[balle] > pan.getWidth()-50) 
                    backX = true;
     
                if(y[balle] < 1) 
                    backY = false;
     
                if(y[balle] > pan.getPosRectY()-50 && x[balle] > pan.getPosRectX() && x[balle] < pan.getPosRectX()+50)
                    backY = true;
     
                if(!backX)              
                    pan.setPosX(x[balle]++);
                else
                    pan.setPosX(x[balle]--);
     
                if(!backY)
                    pan.setPosY(y[balle]++);
                else
                    pan.setPosY(y[balle]--);
     
                pan.repaint();
     
                try{
                    Thread.sleep(3);
     
                }catch(InterruptedException ex){
                    ex.printStackTrace();				
                }
            }
        }
    Merci à ceux qui prendront le temps de m'aider =)

  2. #2
    Rédacteur
    Avatar de CyaNnOrangehead
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2008
    Messages : 777
    Points : 1 731
    Points
    1 731
    Par défaut
    Bonjour

    Cet article est sympa pour expliquer les detections de collisions : http://devmag.org.za/2009/04/13/basi...-in-2d-part-1/

    Sinon, ce x[balle] ? tu entretien un array de tous les x et les y de ton jeu ?
    je verrai plutôt une approche objet comme ceci : balls.getX() ....
    Retrouvez tous mes tutoriels : http://caron-yann.developpez.com/

    Et mon projet en cours : Algoid - programming language

    N'oubliez pas de consulter les FAQ Java (http://java.developpez.com/faq/) et les cours et tutoriels Java (http://java.developpez.com/cours/)

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2013
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 36
    Points : 19
    Points
    19
    Par défaut
    Merci pour le lien je vais regarder ça quand j'aurais le temps =)

    Oui c'est exacte c'est un tableau de position en x et en y parce que je voudrais créer plusieurs balles mais je rencontre là aussi quelques difficultés. J'utilise des Thread pour créer plusieurs balles mais à l'affichage ça clignote c'est pas jolie jolie.

    Mais pour ta dernière remarque, on peut faire un tableau de position non ? où c'est à éviter ?

    A bientôt,

  4. #4
    Rédacteur
    Avatar de CyaNnOrangehead
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2008
    Messages : 777
    Points : 1 731
    Points
    1 731
    Par défaut
    OK ! Reprenons depuis le début.
    Il te faut une classe qui définisse ton environnement de jeu (ton renderer)
    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
     
    public class StagePanel extends JPanel {
     
            private static final Color bg = new Color(94, 63, 107);
     
            private final List<Shape> shapes;
    // methodes
            @Override
            public void paint(Graphics g) {
     
                    g.setColor(bg);
                    g.fill(new Rectangle2D.Float(0, 0, this.getWidth(), this.getHeight()));
     
                    synchronized (this) {
                            for (Shape shape : shapes) {
                                    shape.draw(g);
                            }
                    }
     
            }
    }
    Cette classe à pour role : d'entretenir un liste de shape (éléments graphiques) et elle est capable de parcourir cette liste et des les dessiner dans sa méthode surchargée draw.

    Crée un Thread dans ton constructeur qui execute ça : StagePanel.this.repaint(); Ca vas permettre de redessiner ton frame de façon répété. Disons toutes les 25 frames par secondes.

    Voici ensuite son shape :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public abstract class Shape {
     
            protected int x, y, w, h;
     
            public getX ... getY .... getW, getH, setX et setY etc...
     
            public abstract draw(Graphics g);
     
    }
    Et ton cercle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class Circle extends Shape {
     
            @Override
            public void draw(Graphics g) {
                    g.setColor(fillColor);
                    g.fillOval(x, y, w, h);
     
                    g.setColor(shapeColor);
                    g.drawOval(x, y, w, h);
            }
    }
    Voilà, ça devrait te donner les bases pour créer un mini moteur de jeu en swing.

    En gros l'idée c'est de créer un seul thread qui redessine ton composant graphique à intervale régulier. Le dessins s'effectue en parcourant la liste des éléments graphiques et en leur donnant l'ordre de ce dessiner tour à tour.
    Ce sont eux qui sont responsable de ce dessiner individuellement.

    Avec ça, plus de clignotement, normalement.
    Retrouvez tous mes tutoriels : http://caron-yann.developpez.com/

    Et mon projet en cours : Algoid - programming language

    N'oubliez pas de consulter les FAQ Java (http://java.developpez.com/faq/) et les cours et tutoriels Java (http://java.developpez.com/cours/)

  5. #5
    Membre à l'essai
    Inscrit en
    Février 2013
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 36
    Points : 19
    Points
    19
    Par défaut
    Salut,

    Je pense avoir à peu près compris, je vais essayer de mettre ça en application.

    Merci bien pour ton aide.

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

Discussions similaires

  1. [Box2D] Problème avec la vitesse d'une balle
    Par Emilie L. dans le forum Physique
    Réponses: 1
    Dernier message: 29/09/2010, 15h29
  2. problème de position d'une collection
    Par john_wili dans le forum Struts 1
    Réponses: 11
    Dernier message: 04/04/2009, 23h05
  3. Problème déplacement d'une balle
    Par Coco4486 dans le forum Ogre
    Réponses: 21
    Dernier message: 09/05/2008, 11h47
  4. [debutant] faire bouger une balle et une raquette problème
    Par jerem721 dans le forum Interfaces Graphiques en Java
    Réponses: 6
    Dernier message: 26/11/2007, 20h26
  5. Réponses: 2
    Dernier message: 04/11/2007, 13h10

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