public override void Update(GameTime gameTime) { bbox = new BoundingBox(new Vector3(uneraquette.Position.X, uneraquette.Position.Y, 0), new Vector3(uneraquette.Position.X + uneraquette.Texture.Width, uneraquette.Position.Y + uneraquette.Texture.Height, 0)); // La classe Controls contient les constantes correspondantes aux contrôles définies sur la plate-forme // et des méthodes, pour chaque action possible dans le jeu, qui vérifient si les contrôles correspondants // ont été "enclenchés" if (Controls.CheckActionDroite()) { if (!Element2D.testCollision(this, this.Balle.Bbox)) { // Est-ce qu'on est tout à droite ? if (uneraquette.Position.X + uneraquette.Texture.Width < maxX) { // On passe par un vecteur intermédiaire // pour initialiser la nouvelle position float tempo = uneraquette.Position.X; tempo += uneraquette.Vitesse.X; Vector2 pos = new Vector2(tempo, uneraquette.Position.Y); uneraquette.Position = pos; } } else { Console.WriteLine("CheckActionDown (joueur" + joueur + ") --> collision "); } } else if (Controls.CheckActionGauche()) { if (!Element2D.testCollision(this, this.Balle.Bbox)) { // Est-ce qu'on est tout à gauche ? if (uneraquette.Position.X > minX) { // On passe par un vecteur intermédiaire // pour initialiser la nouvelle position float tempo = uneraquette.Position.X; tempo -= uneraquette.Vitesse.X; Vector2 pos = new Vector2(tempo, uneraquette.Position.Y); uneraquette.Position = pos; } } else { Console.WriteLine("CheckActionUp (joueur" + joueur + ") --> collision "); } } base.Update(gameTime); }
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 (Element2D.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 = Element2D.getRelativePosition(infosBalle, infosRaquette); if (posRel[0] == Element2D.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] == Element2D.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 && Element2D.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 = Element2D.getRelativePosition(infosBalle, infosBrique); if (posRel[0] == Element2D.CROISEMENT && (posRel[1] == Element2D.AU_DESSUS || posRel[1] == Element2D.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] == Element2D.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++; } }