Processing – Rebondissement sur objet

int balleX;
int balleY;
int vitesseX;
int vitesseY;

int diametre = 20;
int rayon;

int obstacleX;
int obstacleY;
int obstacleL;
int obstacleH;

void setup () {
  size (800, 600);
  
  obstacleL = 100;
  obstacleH = 100;
  
  obstacleX = width / 2 - obstacleL;
  obstacleY = height / 2 - obstacleH;
  
  // Faire apparaître la balle aléatoirement dans la zone supérieur gauche
  balleX = int (random (diametre, obstacleX - diametre)) + width / 2;
  balleY = int (random (diametre, obstacleY - diametre));
  
  // Donner une vitesse aléatoire à la balle;
  vitesseX = int (random (-5, 5));
  vitesseY = int (random (-5, 5));
  
  rayon = diametre / 2;
}

void draw () {
  background (0);
  
  obstacleY = mouseY;
  
  // Gestion du rebondissement en X
  if (balleX < rayon || balleX > width - rayon) {
    // Rebondissement des murs en X
    vitesseX = -1 * vitesseX;
  }
  else if ((balleY - rayon) > obstacleY && (balleY + rayon) < (obstacleY + obstacleH)) {
    // Est-ce que la balle est dans l'espace Y de l'obstacle
    if (vitesseX > 0) {
      if (balleX + rayon > obstacleX && balleX - rayon < obstacleX) {
        vitesseX = -1 * vitesseX;
      }
    }
    else {
      if (balleX + rayon > obstacleX + obstacleL && balleX - rayon < obstacleX + obstacleL) {
        vitesseX = -1 * vitesseX;
      }
    }
  }


  // Gestion du rebondissement en Y
  // Méthode en utilisant un gros IF
  if ((balleY < rayon || balleY > height - rayon) || // Pour les murs en X 
      (vitesseY > 0 && (balleY + rayon) > obstacleY && balleY - rayon < obstacleY && (balleX - rayon) > obstacleX && (balleX + rayon) < (obstacleX + obstacleL)) ||
      (vitesseY < 0 && (balleY - rayon) < (obstacleY + obstacleH) && (balleY + rayon > obstacleY + obstacleH)  && (balleX - rayon) > obstacleX && (balleX + rayon) < (obstacleX + obstacleL))) {        
    vitesseY = -1 * vitesseY;
  }  
  
  balleX = balleX + vitesseX;
  balleY = balleY + vitesseY;
  
  ellipse (balleX, balleY, diametre, diametre);
    
  
  fill (255);
  rect (obstacleX, obstacleY, obstacleL, obstacleH);
  
  
  
  
}

Publié

dans

par

Étiquettes :

Commentaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.