Processing : Collision entre objets avec classe

Projet processing   Code de l’objet
class Objet {
  PImage img;
  
  float x;
  float y;
  float largeur;
  float hauteur;
  
  float vitesseX = 0;
  float vitesseY = 0;
  
  int visible = 1;
  
  
  Objet () {
    x = y = largeur = hauteur = 0;
  }
  
  void setImage (PImage i) {
    img = i;
    largeur = i.width;
    hauteur = i.height;
  }
  
  
  void update() {
    x = x + vitesseX;
    y = y + vitesseY;
  }
  
  
  void afficher () {
    if (visible == 1) {
      image (img, x, y, largeur, hauteur);
    }
  }
  
  boolean collision(Objet autre) {
    boolean resultat = false;
    if (autre.x > x - autre.largeur && autre.x + autre.largeur < (x + largeur + autre.largeur)) {
      if (autre.y > y - autre.hauteur && autre.y + autre.hauteur < y + hauteur + autre.hauteur) {
        resultat = true;
      }
    }
    
    return resultat;
    
  }
  
}
  Code du programme
Objet singe;
Objet asteroid;
Objet cadeau;

PImage imgSinge;
PImage imgAst;
PImage imgCadeau;

float ratio = .25;

void setup () {
  fullScreen();

  imgSinge = loadImage("singe.png");
  
  imgAst = loadImage ("asteroid.png");
  imgCadeau = loadImage ("cadeau.png");

  singe = new Objet();
  singe.setImage (imgSinge);
  singe.largeur = imgSinge.width * ratio;
  singe.hauteur = imgSinge.height * ratio;
  singe.x = width / 2;
  
  asteroid = new Objet();
  asteroid.setImage (imgAst);
  asteroid.x = width;
  asteroid.y = random (0, height - imgAst.height);
  asteroid.hauteur = asteroid.hauteur * ratio;
  asteroid.largeur = asteroid.largeur * ratio;
  
  asteroid.vitesseX = -15;
  
  cadeau = new Objet();
  cadeau.setImage (imgCadeau);
  cadeau.x = random (0, width - imgCadeau.width);
  cadeau.y = -imgCadeau.height;
  cadeau.hauteur = cadeau.hauteur * ratio;
  cadeau.largeur = cadeau.largeur * ratio;
  cadeau.vitesseY = 5;
  
}

void draw() {
  background(0);
  
  asteroid.update();
  
  if (asteroid.x < 0) {
    asteroid.x = width;
    asteroid.y = random (0, height - asteroid.hauteur);
  }
  
  cadeau.update();
  
  if (cadeau.y > height) {
    cadeau.y = -cadeau.hauteur;
    cadeau.x = random (0, width - cadeau.largeur);
    cadeau.vitesseY = random (5, 15);
  }
  
  singe.update();
  
  if (cadeau.collision (asteroid)) {
    fill (0, 200, 0);
    rect (cadeau.x, 0, cadeau.largeur, height);
    fill (200, 0, 0);
    rect (0, asteroid.y, width, asteroid.hauteur);
  }
    
  
  cadeau.afficher();  
  singe.afficher();
  asteroid.afficher();
}

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.