Collision entre le cercle et la ligne
This commit is contained in:
@@ -19,6 +19,10 @@ public class ZoneDessin extends JPanel {
|
||||
|
||||
// liste des objets graphiques
|
||||
private ArrayList<ObjetGraphique> listeObjets = new ArrayList<ObjetGraphique>();
|
||||
// indicateur qu'une défaite (perte de contact) est survenue
|
||||
private boolean collisionOccur = false;
|
||||
// indique si le cercle a déjà été sur la ligne (début de la phase de maintien)
|
||||
private boolean hadBeenOnLine = false;
|
||||
|
||||
public ZoneDessin(){
|
||||
setLayout(new BorderLayout());
|
||||
@@ -49,8 +53,33 @@ public class ZoneDessin extends JPanel {
|
||||
obj.Animer();
|
||||
}
|
||||
|
||||
// 2. on demande à redessiner
|
||||
repaint();
|
||||
// 2. vérifier collisions entre une Ligne et un Cercle
|
||||
for (ObjetGraphique obj : listeObjets) {
|
||||
if (obj instanceof Ligne) {
|
||||
Ligne l = (Ligne) obj;
|
||||
for (ObjetGraphique other : listeObjets) {
|
||||
if (other instanceof Cercle) {
|
||||
Cercle c = (Cercle) other;
|
||||
// On commence à surveiller une fois que le centre du
|
||||
// cercle est au-dessus d'un segment (le cercle est "sur la ligne").
|
||||
if (l.estSurLaLigne(c.getX())) {
|
||||
hadBeenOnLine = true;
|
||||
// Si le cercle n'est plus en contact (distance > rayon)
|
||||
// alors le joueur perd (il doit maintenir le contact).
|
||||
if (!l.collisionAvec(c)) {
|
||||
collisionOccur = true;
|
||||
estArrete = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (estArrete) break;
|
||||
}
|
||||
}
|
||||
|
||||
// 3. on demande à redessiner
|
||||
repaint();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -65,4 +94,9 @@ public class ZoneDessin extends JPanel {
|
||||
obj.Afficher(g);
|
||||
}
|
||||
}
|
||||
|
||||
// Indique si une collision est survenue
|
||||
public boolean aCollision() {
|
||||
return collisionOccur;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user