Intersect rectangles

Skarwild Messages postés 7 Statut Membre -  
KX Messages postés 19031 Statut Modérateur -
Bonjour,

Je suis débutant en java et j'ai un petit problème, je cherche l'intersection de deux rectangles

pour ça je fais la collision entre un petit rectangle et un plus gros rectangle Rectangle(50, 50, 200, 20) .

Le problème c'est que lorsque je fais r1.intersects(r); l'intersection ne marche que pour le coté du haut , pour le coté bas, droit et gauche il ne détecte aucune collision.

Cordialement

2 réponses

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    Fais voir ton code, impossible de t'aider sinon !
    0
  2. Skarwild Messages postés 7 Statut Membre
     
     public Boolean isCollided(Rectangle r){
    return terrain.intersects(r);
    }
    avec terrain : private Rectangle terrain = new Rectangle(50, 50, 200, 20);
    le rectangle avec lequel j'apelle la fonction :
    java.awt.Rectangle[x=200,y=284,width=16,height=16]
    0
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      Ces deux rectangles ne s'intersectent pas, c'est donc normal d'avoir false...

      0
    2. Skarwild Messages postés 7 Statut Membre
       
      j'ai probablement un problème d'affichage car à l'écran ils s'intersectent
      0
    3. KX Messages postés 19031 Statut Modérateur 3 020
       
      Un exemple d'affichage :

      import java.awt.Component;
      import java.awt.Graphics;
      import java.awt.Rectangle;
      
      import javax.swing.JFrame;
      
      public class Test
      {
          public static void main(String[] args)
          {
              JFrame frame = new JFrame();
              frame.add(new Component()
              {
                  Rectangle r1 = new Rectangle(50, 50, 200, 20);
                  Rectangle r2 = new Rectangle(200, 284, 16, 16);
                  
                  public void paint(Graphics g)
                  {
                      g.drawRect(r1.x, r1.y, r1.width, r1.height);
                      g.drawRect(r2.x, r2.y, r2.width, r2.height);
                  }
              });
              
              frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
              frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              frame.setVisible(true);
          }
      }
      0