private void gestionCollision() { Vector2 v; // Test de collision float[] infosBalle = { uneballe.Position.X, uneballe.Position.Y, TAILLEX, TAILLEY }; int[] posRel; // avec les raquettes // On récupère la vitesse courante v = uneballe.Vitesse; if (ElementText2D.testCollision(this, this.raquette.Bbox)) { // Le prochain mouvement entraîne une collision, on évalue la position relative de la balle // par rapport à la raquette pour mettre à jour le vecteur vitesse float[] infosRaquette = { raquette.Uneraquette.Position.X, raquette.Uneraquette.Position.Y, raquette.Uneraquette.Size.X, raquette.Uneraquette.Size.Y }; posRel = ElementText2D.getRelativePosition(infosBalle, infosRaquette); if (posRel[0] == ElementText2D.CROISEMENT) { v.Y *= -1; // vitesse augmentee... score = 30 if (Math.Abs(v.Y) < v_max.Y) { v.Y *= 1.2f; } uneballe.Vitesse = v; score += 30; } // Si les 2 objets se croisent sur l'axe des Y if (posRel[1] == ElementText2D.CROISEMENT) { v.X *= -1; if (Math.Abs(v.X) < v_max.X) { v.X *= 1.2f; } uneballe.Vitesse = v; } } gestionCollisionBrique(); }
// Test la collision avec les briques private void gestionCollisionBrique() { BoundingBox bbox_brique; Brique unebrique; Vector2 v; Boolean collision = false; float[] infosBalle = { uneballe.Position.X, uneballe.Position.Y, uneballe.Position.X + TAILLEX, uneballe.Position.Y + TAILLEY }; int[] posRel; int x = 0; int y = 0; int tempx = 0, tempy = 0; v = uneballe.Vitesse; // on teste une collision avec une éventuelle brique while (x < NBLIGNES && !collision) { y = 0; while (y < NBCOLONNES && !collision) { unebrique = mesBriquesballe[x, y]; // On définit uen enveloppe pour la brique bbox_brique = new BoundingBox(new Vector3(unebrique.Position.X, unebrique.Position.Y, 0), new Vector3(unebrique.Position.X + unebrique.Size.X, unebrique.Position.Y + unebrique.Size.Y, 0)); // on mémorise l'enveloppe if (!unebrique.Marque && ElementText2D.testCollision(this, bbox_brique)) { // Le prochain mouvement entraîne une collision, on évalue la position // relative de la balle // par rapport à la raquette pour mettre à jour le vecteur vitesse float[] infosBrique = { unebrique.Position.X, unebrique.Position.Y, unebrique.Position.X + unebrique.Size.X, unebrique.Position.Y + unebrique.Size.Y }; posRel = ElementText2D.getRelativePosition(infosBalle, infosBrique); if (posRel[0] == ElementText2D.CROISEMENT && (posRel[1] == ElementText2D.AU_DESSUS || posRel[1] == ElementText2D.EN_DESSOUS)) { v.Y *= -1; //collx = true; if (Math.Abs(v.Y) < v_max.Y) { v.Y *= 1.1f; } uneballe.Vitesse = v; } // Si les 2 objets se croisent sur l'axe des Y else if (posRel[1] == ElementText2D.CROISEMENT) { v.X *= -1; if (Math.Abs(v.X) < v_max.X) { v.X *= 1.1f; } uneballe.Vitesse = v; } collision = true; tempx = x; tempy = y; score += 10; } y++; } x++; } if (collision) { mesBriquesballe[tempx, tempy].Marque = true; count++; } }